2010-09-02 4 views
2

J'ai du mal à régler la condition d'égalité sur un champ datetime après la conversion à hh:mm:ss.mmm:Convertir varchar 114 sur datetime est égal à quoi?

select top 1 convert(varchar, timestamp, 114) from TEST_TABLE 

/* returns a single entry of 11:33:35:000 */ 

Je veux trouver toutes les entrées avec cet horodatage:

select * from TEST_TABLE where convert(varchar, timestamp, 114) = '11:33:35.000' 

/* returns nothing */ 

J'ai aussi essayé le format de '11:33:35' (sans le mmm) sur le RHS du signe égal, pas de chance. J'exécute ces requêtes dans MS SQL Server Management Studio 2008 si cela est important. Mais j'ai besoin d'un moyen qui fonctionne multi-plateforme car finalement je cours un script Perl pour effectuer la requête via le module DBI.

Répondre

2

11:33:35:000 n'est pas la même chose que 11:33:35.000

essayer

select * 
from TEST_TABLE 
where convert(varchar, timestamp, 114) = '11:33:35:000' 

Je préfère le style 108 me

select convert(varchar, GETDATE(), 108) 

15:29:00

2

Vous comparez des chaînes, donc ils doivent être exactement les mêmes:

select * from TEST_TABLE where convert(varchar, timestamp, 114) = '11:33:35:000' 

Notez le signe deux-points au lieu de la période dans le littéral de chaîne.