
isso realmente me deixou perplexo por alguns dias e estou procurando ajuda. Estou usando o SQL Server 2017.
Estou tentando manipular strings de um campo de formato livre e convertê-las em uma data no formato "dd/mm/aaaa" ou, se não estiverem nesse formato, simplesmente exibir o texto literalmente.
Eu preciso disso em uma VIEW, então não posso usar SET LANGUAGE. Parece simples usarconverteredatamas não parece funcionar.
Então, para o trecho de código abaixo (lembre-se que isso estará em uma VIEW), eu quero ler o texto e se a string for convertida em uma data (ou seja, estiver no formato "dd/mm/yyyy", execute a conversão para uma data, pois preciso dela no formato de data para o Excel pegar (via banco de dados Connect SQL Sever)) e, se não for convertida em uma data, exiba o texto como está.
create table dateTest1
( idx int,
dateStringTest varchar(15)
);
insert into dateTest1 (idx, dateStringTest)
values (1, '13/01/2021'), (2, 'no');
select
case when isdate(convert(datetime, dateStringTest, 103)) = 1
then convert(datetime, dateStringTest, 103)
else dateStringTest
end as dtres
from dateTest1
--where idx = 1
-- error: Msg 241, Level 16, State 1, Line 15 Conversion failed when converting date and/or time from character string.
-- this error happens for idx = 2. Idx = 1 works ok
Qualquer ajuda com isso seria muito apreciada, pois está me afetando.
Desde já obrigado Paulo
Responder1
Não tenho certeza de quão adequado seu banco de dados é para fazer isso. As funções de conversão de dados no SQL Server são um pouco “desajeitadas”, comparadas com algumas outras.
No entanto, do ponto de vista do seu banco de dados:
Se algo estiversupostoser umData, então issodeveria estarum encontro.
Pode estar "ausente" (ou seja, anulável), mas não pode ser outra coisa.
Se issoeramser qualquer outra coisa, então não deve ser tratadocomoaData.
Os usuários não podem entrardatas- apenas oRepresentações de personagensdeles.
A exibição de [números e] datas do seu aplicativo requer formatação na "saída".
Ler [números e] datas em seu aplicativo requer o inverso, "desformatação" (e validação, é claro) na "entrada".
Os dados devemsempreser armazenado nocorretoTipo de dados - "A ferramenta certa para o trabalho certo".
A análise de texto livre éprovavelmentemelhor feito em seu aplicativo, extraindo o valor da data, validando e "desformatando" e depois armazenando-o.