pourquoi l'aide COMME avec des HORODATAGES ne fonctionnent pas dans DB2
j'ai un problème à l'aide de LIKE
structure en DB2
:
par exemple:
select * from TEST where TIME LIKE '2012-03-04-%'
FYI. - TIME
est TIMESTAMP
type de données.
pourquoi à l'aide de LIKE
avec TIMESTAMPS
ne fonctionnent pas?
Infos supplémentaires: je veux extraire des données à partir d'un seul jour fournies par l'utilisateur dans l'instruction select.
Parce que les horodateurs ne sont pas des chaînes de caractères? Si vous voulez vraiment à les traiter comme de la ficelle, de les jeter à cordes et spécifier le format que vous voulez. Mais pour ce type de requête, ne jette pas l'horodatage à autre chose, l'utiliser en mode natif, il ya une pléthore de fonctions et de constructions pour traiter ce type de données en mode natif. Arrêter de les traiter comme des cordes.
OriginalL'auteur f00sa | 2012-04-04
Vous devez vous connecter pour publier un commentaire.
Juste élargissement sur @mortb réponse, j'aimerais utiliser
BETWEEN
ouL'avantage de l'utilisation de
BETWEEN
ou une comparaison à l'aide decasts
etLIKE
signifie que si il y a un indice surtime
il ne serait pas en mesure d'être utilisé en raison de son casting.BETWEEN
avec des valeurs continues. Pour ne pas cacher le champ de recherche dans une fonction. Et pour ne pas utiliser la manipulation de la chaîne à traiter avecTIMESTAMP
. Pourquoi les gens pensent que tout est une chaîne de caractères!?Je suppose que la confusion a commencé quand ils ont ajouté " (entre guillemets) autour de la date de la première place. Lors de l'écriture de SQL pour une base de données access, vous pouvez entourer les dates avec # (#2012-04-04#) au lieu de régulièrement les littéraux de chaîne. Qui semble de plus en plus ambiguë.
Les Dates n'ont pas de guillemets autour d'eux. Dans votre requête, vous avez deux constantes de chaîne. Comme
TIMESTAMP >= STRING
n'est pas possible, l'un ou l'autre type de données doit être implicitement distribution à l'autre. Basé sur l'ordre de precidence de types de données, les chaînes obtenir implicitement convertie en Horodateurs. Comme si vous avez utilisé un CAST() de la fonction de vous-même.OriginalL'auteur beny23
AIME, c'est pour chaîne de caractères (char, varchar) les types de données. Utilisation
WHERE time BETWEEN '2012-03-04' AND '2012-03-04 23:59:59.998'
2012-03-05
, ce qui n'est pas prévuPeut-être, OÙ le temps ENTRE "2012-03-04" ET "2012-04-04 23:59:59.998" serait mieux alors?
Non, le bon-à-détail de réponse est fourni par beny23.
Pour discret valeurs,
BETWEEN
peut être bien. Pour continue les valeurs, cependant, l'utilisation>= AND <
. Ce n'est pas du SQL, c'est de comprendre les types de données et leurs comportements.C'est pas tellement d'élégance, mais de précision.
BETWEEN
aura un boundry condition d'erreur, car il comprend d'un seul point de la gamme. Même si vous utilisezBETWEEN ValueA AND ValueB-aTinyBit
, vous devez vous assurer que leTinyBit
que vous soustrayez est vraiment la plus petite quantité possible. Avec des Flotteurs qui est impossible, les différentes données de date/heure-types ont des degrés de précision variables, c'est une recette pour les marges d'erreur.OriginalL'auteur mortb
Vous pouvez utiliser comme cette où le temps entre to_date('2016-06-17 00:00:00','aaaa-mm-jj HH24:MI:SS') et to_date('2016-06-18 00:00:00','aaaa-mm-jj HH24:MI:SS')
OriginalL'auteur Prabhu Kandasamy