Suite

Requête SQL dans arcpy - fonctionnalité SELECT WHERE entre deux valeurs


J'ai besoin de sélectionner des fonctionnalités entre deux valeurs en python avec arcpy. Cependant, chaque fois que j'essaie d'exécuter le code ci-dessous, il renvoie le message d'erreur "Une instruction SQL invalide a été utilisée".

whereclause = """"X" ENTRE {0} ET {1}""".format( min(X)[0]-1000, max(X)[0]+1000) ap.FeatureClassToFeatureClass_conversion(SamledeMaalinger,ap. env.workspace,"SamledeMaalingerSort", whereclause)

La clause where revient "X" ENTRE 555157.0723 ET 557157.0723 ce n'est donc pas la chaîne qui pose problème.

La requête SQL fonctionne si j'utilise < et > à la place, mais BETWEEN pour une raison quelconque ne fonctionne pas.

Alors, quel est le problème ? Les requêtes SQL dans arcpy ont-elles des limites ?


Comme @AlexTereshnekov l'a commenté, le problème peut être causé par votre choix de stockage de données spatiales.

Je viens d'utiliser l'expression ci-dessous avec succès dans une classe d'entités de géodatabase fichier :

OIDDE ENTRE 1 ET 100

mais dans un fichier de formes, cette expression a signalé qu'il s'agissait d'un SQL invalide :

"FID" ENTRE 1 ET 100

Mes tests ont utilisé ArcGIS 10.2.2 for Desktop


La principale difficulté est que vous voulez avoir des lignes pour des dates pour lesquelles il n'y a pas de données dans le tableau. Vous devez donc trouver un moyen de générer ces lignes avec des valeurs nulles.

Je pense que la solution la plus simple et la plus facile à comprendre serait une procédure stockée sélectionnable, c'est-à-dire

et pour l'utiliser il vous suffit de sélectionner :

Si vous voulez vous passer de SP, Firebird 2.5 prend en charge le CTE récursif qui peut être utilisé pour générer toutes les dates pour une plage donnée. Utilisez un autre CTE pour calculer les sommes des dates pour lesquelles il existe des données, puis joignez-les par date :

Notez que dans les exemples, j'ai utilisé le nom de colonne d au lieu de date car on ne peut pas avoir de colonne nommée date dans Firebird à moins d'utiliser des identifiants entre guillemets (ce que je ne fais jamais). Au lieu de votre MyTable, j'ai utilisé le test de nom de table .

Les solutions auxquelles je peux penser sont :


Comme vous pouvez le voir, il y a deux façons de faire les choses :

Évidemment, la deuxième voie est beaucoup plus simple (seulement deux cas contre quatre).

Vous devez couvrir toutes les possibilités. Partir de la date ou alors À ce jour pourrait se situer entre votre plage de dates ou les dates d'enregistrement pourraient couvrir toute la plage.

Si From_date ou To_date est compris entre les dates, ou From_date est inférieur à la date de début et To_date est supérieur à la date de fin, cette ligne doit être renvoyée.

Essayez la requête suivante pour obtenir des dates comprises dans la plage :

Cela couvre toutes les conditions que vous recherchez.

Juste mes 2 cents, je trouve qu'utiliser le format "jj-MMM-aaaa" est le plus sûr car le serveur db saura ce que vous voulez, quels que soient les paramètres régionaux du serveur. Sinon, vous pourriez potentiellement rencontrer des problèmes sur un serveur dont les paramètres régionaux de date sont aaaa-jj-mm (pour quelque raison que ce soit)

Cela a toujours bien fonctionné pour moi -)

Vérifiez cette requête, j'ai créé cette requête pour vérifier si la date d'enregistrement se chevauche avec des dates de réservation

cela réexécutera les détails qui se chevauchent, pour obtenir les détails qui ne se chevauchent pas, puis supprimer le « NON » de la requête


Hfrhyu

Comment puis-je connaître la mythologie et l'histoire de ma forteresse ?

Est-il juste qu'un professeur nous note sur la possession d'anciens travaux ?

Comment dire que vous êtes un géant ?

Conversion d'une fonction scalaire en fonction TVF pour une exécution parallèle - toujours en cours d'exécution en mode série

Utiliser des signaux audio pour encourager une bonne posture

Comment l'effet secondaire du sort Heat Metal interagit-il avec une créature résistante/immunisée aux dégâts de feu ?

Pourquoi Nikon 1.4g est-il meilleur alors que Nikon 1.8g est plus net ?

Existe-t-il des preuves tangibles que le système d'examen par les pairs des subventions fonctionne bien mieux que le système aléatoire ?

Y a-t-il un mot pour un endroit plein de confusion ?

Dans quel ordre les fichiers/répertoires sont-ils sortis dans dir ?

Comment réduire l'écart entre la gauche et la droite de cdot avec une macro ?

Nombre maximal de sous-séquences additionnées avec des éléments non adjacents

Matin, Après-midi, Nuit Kanji

La méthode de communication textuelle la plus efficace ?

Ai-je vraiment besoin d'avoir un message dans un roman pour plaire aux lecteurs ?

ArcGIS Pro Python arcpy.CreatePersonalGDB_management

Un tableau de grand livre est-il requis si le côté de ma maison est en bois?

Combien de dégâts une tasse de matière d'étoiles à neutrons causerait-elle à la Terre ?

Comment réagir face au comportement hostile d'un développeur senior ?

Le bonus de dégâts et la pénalité de précision du don Grand maître d'armes peuvent-ils s'appliquer aux attaques du sort Arme spirituelle ?

La documentation grep sur l'ignorance de la casse est-elle erronée, car elle n'ignore pas la casse dans les noms de fichiers ?

Sélection et mise à jour des valeurs d'attribut à l'aide de la console Python dans QGIS ?

Unicorn Meta Zoo # 1: Pourquoi un autre podcast?“Select by Attribute” dans QGIS en utilisant python?Le plugin QGIS sélectionne et modifie l'attribut de fonctionnalitéMise à jour d'un attribut de fonctionnalité Open Attribute TableMise à jour dans le plugin QGIS?Comment obtenir QgsFeatureId avec une ligne et une colonne dans qtablewidget. (PyQGIS)Sélection de fonctionnalités à l'aide de fonctions d'expression Python personnalisées dans QGIS 2.18QGIS : requête SQL dans la console python pour additionner une colonne en fonction des valeurs de deux autres colonnesImpossible de calculer de nouvelles valeurs pour un attribut vide à l'aide d'attributs existants dans QGIS avec pythonSélectionner des fonctionnalités à l'aide d'une expression, Valeur de la table attributaire QGISChange à l'aide du modeleur graphique ?

Je travaille avec les colonnes Landusefc et Class (table de référence).

Ce que je veux, c'est : sélectionner toute l'eau dans "Classe" et donner une valeur par exemple "8" dans la colonne "Landusefc" pour ces caractéristiques sélectionnées.


J'ai essayé le code suivant, il fonctionne jusqu'à la partie sélection mais ne semble pas changer la valeur de l'attribut à l'aide de ChangeAttributeValue .

Je travaille avec les colonnes Landusefc et Class (table de référence).

Ce que je veux, c'est : sélectionner toute l'eau dans "Classe" et donner une valeur par exemple "8" dans la colonne "Landusefc" pour ces caractéristiques sélectionnées.


J'ai essayé le code suivant, il fonctionne jusqu'à la partie sélection mais ne semble pas changer la valeur de l'attribut à l'aide de ChangeAttributeValue .

Je travaille avec les colonnes Landusefc et Class (table de référence).

Ce que je veux, c'est : sélectionner toute l'eau dans "Classe" et donner une valeur par exemple "8" dans la colonne "Landusefc" pour ces caractéristiques sélectionnées.


J'ai essayé le code suivant, il fonctionne jusqu'à la partie sélection mais ne semble pas changer la valeur de l'attribut à l'aide de ChangeAttributeValue .

Je travaille avec les colonnes Landusefc et Class (table de référence).

Ce que je veux, c'est : sélectionner toute l'eau dans "Classe" et donner une valeur par exemple "8" dans la colonne "Landusefc" pour ces caractéristiques sélectionnées.


J'ai essayé le code suivant, il fonctionne jusqu'à la partie sélection mais ne semble pas changer la valeur de l'attribut à l'aide de ChangeAttributeValue .


Syntaxe

La table contenant le champ qui sera mis à jour avec le nouveau calcul.

Le champ qui sera mis à jour avec le nouveau calcul.

L'expression de calcul simple utilisée pour créer une valeur qui remplira les lignes sélectionnées.

Spécifie le type d'expression qui sera utilisé.

  • VB —L'expression sera écrite dans un format VB standard. C'est la valeur par défaut.
  • PYTHON —L'expression sera écrite dans un format Python standard. L'utilisation de méthodes et de propriétés de géoprocesseur est identique à la création d'un géoprocesseur de version 9.2.
  • PYTHON_9.3 —L'expression sera écrite dans un format Python standard. L'utilisation de méthodes et de propriétés de géoprocesseur est identique à la création d'un géoprocesseur de version 9.3.
Avertir:

Les calculs de champ avec un type d'expression VB ne sont pas pris en charge sur les produits 64 bits, notamment ArcGIS Pro , ArcGIS Desktop — Background Geoprocessing (64 bits) — et ArcGIS Server . Pour utiliser avec succès Calculate Field dans ces produits, les expressions doivent être converties en Python, ou dans le cas du géotraitement en arrière-plan (64 bits), le traitement en arrière-plan peut également être désactivé.

Un bloc de code qui sera entré pour les expressions complexes.

Sortie dérivée


Comment calculer la distance entre deux points dans les données spatiales SQL Server 2008 (géographie)

Microsoft SQL Server 2008 a présenté les données spatiales aux développeurs SQL.
Les données spatiales dans Microsoft SQL Server permettent aux programmeurs SQL d'utiliser les types de données Géographie et Géométrie.
Le moyen le plus simple de trouver la distance entre deux points (type de données Geography Point) consiste à utiliser le type de données Geography Méthode STDistance.

Voici un échantillon spatial t-sql qui calcule la distance entre deux points à la surface de la terre.
Puisque nous avons affaire à des points sur terre, nous devons travailler avec des types de données géographiques.

L'ID de référence spatiale (SRID) par défaut pour les types de géographie est 4326 dans Microsoft SQL Server.
Le SRID 4326 n'est donc pas utilisé dans l'exemple t-sql de représentation de point de géographie spatiale.

Veuillez noter que les valeurs de retour de la méthode Geography STDistance() sont exprimées dans les unités utilisées par le système de référence spatiale pour les données géographiques associées.
Ainsi, dans notre cas, en utilisant le SRID par défaut de Microsoft SQL Server, la valeur de sortie de la méthode Geography STDistance() est en mètres pour le SRID 4326.
Bien que les valeurs de latitude et de longitude soient en degrés, l'unité de mesure de la distance entre deux points est le mètre.

Pour des informations détaillées sur quel SRID ou système de référence spatiale utilise quelle unité de mesure, veuillez consulter la vue système sys.spatial_reference_systems

Voici un autre calcul de distance spatiale SQL utilisant la méthode Geography STDistance.
Ici, les variables Geography Point sont déclarées d'une manière différente.
Mais la méthode utilisée pour trouver la distance entre deux points est la même : la méthode STDistance().


TOP 1 sans ORDER BY ne pouvait pas garantir le retour des mêmes résultats même si la sortie de STRING_SPLIT() était garantie (ce qui n'est certainement pas le cas). Alors que dans le monde réel, vous pouvez avoir du mal à trouver un contre-exemple où les données sont ne pas remis dans l'ordre, c'est une chose terrible à faire. Croire que quelque chose fonctionne toujours parce que vous ne l'avez jamais vu se briser, c'est comme supposer que si vous mettez un panneau de cerf sur la route, c'est le seul endroit où vous verrez un cerf.

Cependant, regardons une autre façon de résoudre ce problème. Pourquoi ne localisons-nous pas la position de chaque chaîne individuelle dans la liste globale :

Pensez-vous que nous pourrions l'utiliser pour déterminer le premier élément de la liste? Bien sûr! Essayons encore:

Vous pouvez utiliser la même logique pour trouver le dernier élément, changez simplement ORDER BY idx en ORDER BY idx DESC . En fait, vous pouvez utiliser cette logique pour renvoyer le nième chaîne dans la liste :

En guise d'avertissement, si vous avez des doublons, cela va gâcher les choses, car la valeur de l'index représentera toujours le première l'apparition de cette valeur dans la chaîne. Vous pouvez passer de ROW_NUMBER() à DENSE_RANK() mais cela ne résoudra pas dans tous les cas. Vous pouvez d'abord dédupliquer la chaîne (je parle de certains cas extrêmes ici).


Utilisation de PowerShell pour découvrir des informations sur vos serveurs Microsoft SQL

Je suis un gars de l'infrastructure qui prend en charge de nombreux produits différents dans plusieurs centres de données dans un environnement d'entreprise. L'un de ces produits est Microsoft SQL Server que je prends en charge depuis la version 6.5 dans les années 1990. Dans cet article, je vais expliquer comment PowerShell peut être utilisé pour récupérer à peu près toutes les informations que vous voudriez connaître sur les versions modernes de SQL Server que vous utilisez actuellement dans votre environnement. Cet article n'est pas censé être une plongée profonde, il est destiné à vous aider à réfléchir à la façon dont vous pourriez écrire votre propre code PowerShell pour récupérer les informations spécifiques que vous recherchez à partir de vos serveurs SQL.

Dans ce scénario, vous disposez de deux serveurs exécutant la version d'installation principale (sans interface graphique) de Windows Server 2012 R2. L'un a installé SQL Server 2008 R2 et l'autre a installé SQL Server 2014, chacun a plusieurs instances de SQL Server installées. Tous les exemples présentés sont exécutés sur un poste de travail Windows 8.1 Enterprise Edition avec les outils de gestion SQL Server 2014 installés et le RSAT (Remote Server Administration Tools) installé.

Remarque : SQL Server 2008 R2 et les versions antérieures de SQL Server prenant en charge PowerShell utilisent un composant logiciel enfichable et à partir de SQL Server 2012, un module est utilisé à la place.

Travailler avec SQL Server comme s'il s'agissait d'un système de fichiers

Une façon de travailler avec SQL Server dans PowerShell consiste à utiliser le SQLServer PSDrive qui est créé lorsque le composant logiciel enfichable ou module SQL PowerShell est importé. Cela vous permet de travailler avec SQL Server comme s'il s'agissait d'un système de fichiers.

Étant donné que les outils clients SQL Server 2014 sont installés sur notre poste de travail, il existe un module PowerShell nommé SQLPS installé et vous devrez commencer par importer ce module :

Notez que le paramètre -DisableNameChecking a été spécifié dans l'exemple précédent. Il existe quelques applets de commande dans le module SQLPS qui utilisent des verbes non approuvés (Encode-SqlName et Decode-SqlName) qui entraîneront la génération d'avertissements si ce paramètre facultatif n'est pas spécifié. Les avertissements ne feraient de mal à rien, mais je préfère ne pas les voir. Vous pouvez également voir dans l'exemple précédent que lorsque le module SQLPS est importé, il modifie automatiquement votre emplacement actuel en SQLSERVER PSDrive.

La détermination des instances pour le serveur nommé SQL01 est simple, comme illustré dans l'exemple suivant :

L'une des choses qui rendent PowerShell si puissant est qu'une fois que vous avez compris comment effectuer une tâche pour un élément (un ordinateur dans ce scénario), il est facile d'effectuer la même tâche pour plusieurs éléments.

L'applet de commande ForEach-Object peut être utilisée pour renvoyer les résultats pour plusieurs serveurs SQL :

Par défaut, seule la propriété InstanceName est renvoyée, vous ne savez donc pas quelles instances appartiennent à quels serveurs.

Comme toute autre applet de commande qui produit une sortie, vous pouvez diriger la commande précédente vers Get-Member pour voir toutes les propriétés disponibles ou Format-List –Properties * pour voir toutes les propriétés disponibles et leurs valeurs. Soyez prêt à être submergé car il y a beaucoup plus d'informations sur SQL Server qui peuvent être obtenues. Par souci de simplicité, j'ai choisi de me concentrer sur le nom de l'instance, voici donc quelques propriétés utiles :

&lsquoSQL01&rsquo, &lsquoSQL02&rsquo | PourChaque-Objet

Création ou construction d'une nouvelle instance de géométrie

Création d'une nouvelle instance de géométrie à partir d'une instance existante

Le géométrie type de données fournit de nombreuses méthodes intégrées que vous pouvez utiliser pour créer de nouveaux géométrie instances basées sur des instances existantes.

Pour créer un tampon autour d'une géométrie
STBuffer (type de données géométriques)

Pour créer une version simplifiée d'une géométrie
Réduire (type de données géométriques)

Pour créer l'enveloppe convexe d'une géométrie
STConvexHull (type de données géométriques)

Pour créer une géométrie à partir de l'intersection de deux géométries
STIntersection (type de données géométriques)

Pour créer une géométrie à partir de l'union de deux géométries
STUnion (type de données géométriques)

Pour créer une géométrie à partir des points où une géométrie n'en chevauche pas une autre
STDifference (type de données géométriques)

Pour créer une géométrie à partir des points où deux géométries ne se chevauchent pas
STSymDifference (type de données géométriques)

Pour créer une instance de Point arbitraire qui repose sur une géométrie existante
STPointOnSurface (type de données géométriques)

Construire une instance de géométrie à partir d'une entrée de texte connue

Le géométrie Le type de données fournit plusieurs méthodes intégrées qui génèrent une géométrie à partir de la représentation WKT de l'Open Geospatial Consortium (OGC). La norme WKT est une chaîne de texte qui permet d'échanger des données géométriques sous forme textuelle.

Pour construire n'importe quel type d'instance de géométrie à partir de l'entrée WKT
STGeomFromText (type de données géométriques)

Pour construire une instance de point de géométrie à partir de l'entrée WKT
STPointFromText (type de données géométriques)

Pour construire une instance MultiPoint de géométrie à partir de l'entrée WKT
STMPointFromText (type de données géométriques)

Pour construire une instance de géométrie LineString à partir de l'entrée WKT
STLineFromText (type de données géométriques)

Pour construire une instance de géométrie MultiLineString à partir de l'entrée WKT
STMLineFromText (type de données géométriques)

Pour construire une instance de polygone géométrique à partir de l'entrée WKT
STPolyFromText (type de données géométriques)

Pour construire une instance de géométrie MultiPolygon à partir de l'entrée WKT
STMPolyFromText (type de données géométriques)

Pour construire une instance de géométrie GeometryCollection à partir de l'entrée WKT
STGeomCollFromText (type de données géométriques)

Construire une instance de géométrie à partir d'une entrée binaire connue

WKB est un format binaire spécifié par l'Open Geospatial Consortium (OGC) qui permet géométrie données à échanger entre une application cliente et une base de données SQL. Les fonctions suivantes acceptent l'entrée WKB pour construire des géométries :

Pour construire n'importe quel type d'instance de géométrie à partir de l'entrée WKB
STGeomFromWKB (type de données géométriques)

Pour construire une instance de point de géométrie à partir de l'entrée WKB
STPointFromWKB (type de données géométriques)

Pour construire une instance MultiPoint de géométrie à partir de l'entrée WKB
STMPointFromWKB (type de données géométriques)

Pour construire une instance de géométrie LineString à partir de l'entrée WKB
STLineFromWKB (type de données géométriques)

Pour construire une instance de géométrie MultiLineString à partir de l'entrée WKB
STMLineFromWKB (type de données géométriques)

Pour construire une instance de polygone géométrique à partir de l'entrée WKB
STPolyFromWKB (type de données géométriques)

Pour construire une instance de géométrie MultiPolygon à partir de l'entrée WKB
STMPolyFromWKB (type de données géométriques)

Pour construire une instance de géométrie GeometryCollection à partir de l'entrée WKB
STGeomCollFromWKB (type de données géométriques)

Construire une instance de géométrie à partir de la saisie de texte GML

Le géométrie type de données fournit une méthode qui génère un géométrie exemple de GML, une représentation XML d'objets géométriques. SQL Server prend en charge un sous-ensemble de GML.

Pour construire n'importe quel type d'instance de géométrie à partir d'une entrée GML
GeomFromGml (type de données géométriques)


Lorsque vous interrogez la vue INFORMATION_SCHEMA.VIEWS, les résultats de la requête contiennent une ligne pour chaque vue d'un ensemble de données.

La vue INFORMATION_SCHEMA.VIEWS a le schéma suivant :

Nom de colonne Type de données Valeur
TABLE_CATALOG CHAÎNE DE CARACTÈRES Le nom du projet qui contient l'ensemble de données
TABLE_SCHEMA CHAÎNE DE CARACTÈRES Le nom de l'ensemble de données qui contient la vue, également appelé identifiant de l'ensemble de données
NOM DE LA TABLE CHAÎNE DE CARACTÈRES Le nom de la vue, également appelé ID de la table
VIEW_DEFINITION CHAÎNE DE CARACTÈRES La requête SQL qui définit la vue
CHECK_OPTION CHAÎNE DE CARACTÈRES La valeur retournée est toujours NULL
USE_STANDARD_SQL CHAÎNE DE CARACTÈRES OUI si la vue a été créée à l'aide d'une requête SQL standard NON si useLegacySql est défini sur true

Exemples

Exemple 1:

L'exemple suivant récupère toutes les colonnes de la vue INFORMATION_SCHEMA.VIEWS à l'exception de check_option qui est réservée pour une utilisation future. Les métadonnées renvoyées concernent toutes les vues de mydataset dans votre projet par défaut &mdash myproject .

Pour exécuter la requête sur un projet autre que votre projet par défaut, ajoutez l'ID du projet à l'ensemble de données au format suivant : ` project_id `. ensemble de données .INFORMATION_SCHEMA. voir par exemple, `myproject`.mydataset.INFORMATION_SCHEMA.VIEWS .

Console

Ouvrez la page BigQuery dans Cloud Console.

Saisissez la requête SQL standard suivante dans le champ Éditeur de requêtes boîte. INFORMATION_SCHEMA requiert une syntaxe SQL standard. Le SQL standard est la syntaxe par défaut dans Cloud Console.

Utilisez la commande de requête et spécifiez la syntaxe SQL standard à l'aide de l'indicateur --nouse_legacy_sql ou --use_legacy_sql=false. La syntaxe SQL standard est requise pour les requêtes INFORMATION_SCHEMA.

Les résultats devraient ressembler à ce qui suit :

Notez que les résultats montrent que cette vue a été créée à l'aide d'une requête SQL héritée.

Exemple 2 :

L'exemple suivant récupère la requête SQL et la syntaxe de requête utilisées pour définir myview dans mydataset dans votre projet par défaut &mdash myproject .

Pour exécuter la requête sur un projet autre que votre projet par défaut, ajoutez l'ID du projet à l'ensemble de données au format suivant : ` project_id `. ensemble de données .INFORMATION_SCHEMA. voir par exemple, `myproject`.mydataset.INFORMATION_SCHEMA.VIEWS .

Console

Ouvrez la page BigQuery dans Cloud Console.

Saisissez la requête SQL standard suivante dans le champ Éditeur de requêtes boîte. INFORMATION_SCHEMA requiert une syntaxe SQL standard. Le SQL standard est la syntaxe par défaut dans Cloud Console.

Utilisez la commande de requête et spécifiez la syntaxe SQL standard à l'aide de l'indicateur --nouse_legacy_sql ou --use_legacy_sql=false. La syntaxe SQL standard est requise pour les requêtes INFORMATION_SCHEMA.

Les résultats devraient ressembler à ce qui suit :

Notez que les résultats montrent que cette vue a été créée à l'aide d'une requête SQL standard.

Sauf indication contraire, le contenu de cette page est sous licence Creative Commons Attribution 4.0 et les exemples de code sont sous licence Apache 2.0. Pour plus de détails, consultez les règles du site Google Developers. Java est une marque déposée d'Oracle et/ou de ses filiales.


Voir la vidéo: SQL SELECT WHERE (Octobre 2021).