J'ai un champ dans une base de données SQL Server qui est de type string. Ce champ est utilisé pour différentes choses pour différents clients. Nous stockons des dates dans ce champ pour un client. Lorsque le champ n'est pas chargé, il est vide (chaîne vide). J'ai besoin d'extraire les données de ce champ pour ce client et de l'utiliser dans mon instruction where. Je pensais que ce serait une simple question de couler la valeur à ce type de données, mais j'obtiens l'erreurconvertir une chaîne vide à datetime
'La conversion a échoué lors de la conversion de la date et/ou de l'heure de la chaîne de caractères.
Voici l'extrait de code: where boldet.detmisc1 >= @begin
.
J'ai essayé les suivantes:
where cast(boldet.detmisc1 as date) >= @begin
where cast(isnull(nullif(boldet.detmisc1, ''), ‘’) as date) >= @begin
Est-il possible de convertir une valeur de chaîne vide à une valeur datetime nulle pour que je puisse l'utiliser dans mon où la déclaration?
Base de données: SQL Server 2012
Je joins toute requête dans le cas où quelque chose d'autre est à l'origine de l'erreur:
declare @begin datetime
set @begin = dateadd(dd, datediff(dd, 0, GETDATE()) - 1, 0)
declare @stop datetime
set @stop = dateadd(dd, datediff(dd, 0, GETDATE()), 0)
;
with a as (select boldet.BOL_Key
--boldet.DetMisc1
from ProBillTBL pro WITH (NOLOCK)
INNER JOIN BOLTBL bol WITH (NOLOCK) On Pro.ProBill_Key = Bol.ProBill_Key
INNER JOIN BOLDetailTBL boldet WITH (NOLOCK) On Bol.BOL_Key = BolDet.BOL_Key
INNER JOIN ClientLocTBL cliloc WITH (NOLOCK) On Pro.ClientLoc_Key = Cliloc.ClientLoc_Key
INNER JOIN CarrierTBL car WITH (NOLOCK) On Pro.Carrier_Key = Car.Carrier_Key
--left outer join support sup (nolock) on pro.probill_key = sup.probill_key
where cliloc.ClientLoc_Key = 2519
and boldet.DetMisc3 in ('1', '4', '5')
and (pro.ProEnteredDate >= @begin)
or (cast((case when boldet.detmisc1 = '' then NULL else boldet.detmisc1 end) as date) >= @begin))
select * from a
Quand je commente cette section (cast((case when boldet.detmisc1 = '' then NULL else boldet.detmisc1 end) as date) >= @begin)
je reçois un résultat, mais avec cela dans la clause où j'obtiens l'erreur.
Je reçois toujours la même erreur. J'ai modifié mon post pour inclure la requête entière. –
Peut-être que ce n'est pas juste une chaîne vide mais d'autres valeurs de date invalides. – Magnus
Magnus, ma première réaction a été "Non, ce n'est probablement pas ça" Cependant, j'ai vérifié et trouvé 2 valeurs sur le terrain qui étaient des entrées invalides.Merci de m'avoir invité à vérifier (quelque chose que j'aurais dû faire). –