No SQL Server, você pode usar o
ISDATE()
função para verificar se um valor é uma data válida. Para ser mais específico, esta função verifica apenas se o valor é uma data válida , hora , ou datahora valor, mas não datetime2 valor. Se você fornecer um datetime2 valor,
ISDATE()
dirá que não é uma data (retornará 0
). Este artigo contém exemplos dessa função.
Sintaxe
Primeiro, aqui está a sintaxe:
ISDATE ( expression )
Onde
expression
é a expressão a ser testada. Exemplo 1 - Data de validade
Veja um exemplo usando uma expressão válida:
SELECT ISDATE('2000-01-01') AS Result;
Resultado:
+----------+ | Result | |----------| | 1 | +----------+
Isso retorna
1
, o que significa que é uma data válida , hora , ou datahora valor. Exemplo 2 - Data inválida
Aqui está um exemplo com uma expressão inválida:
SELECT ISDATE('2000-01-01 00:00:00.0000000') AS Result;
Resultado:
+----------+ | Result | |----------| | 0 | +----------+
Isso retorna
0
, o que significa que não é uma data válida , hora , ou datahora valor. Exemplo 3 – Usando o valor de retorno
Você pode usar uma instrução condicional para usar o valor de retorno (em vez de simplesmente exibir
0
ou 1
). Aqui está um exemplo básico em que simplesmente imprimimos Valid Date ou Data inválida , dependendo se o valor de retorno é
1
ou 0
:IF ISDATE('2000-01-01') = 1 PRINT 'Valid Date' ELSE PRINT 'Invalid Date';
Resultado:
Valid Date
Exemplo 4 – Suas configurações de IDIOMA
O valor de retorno de
ISDATE()
depende do seu LANGUAGE
e DATEFORMAT
definições. Aqui está um exemplo para demonstrar como o mesmo valor pode retornar resultados diferentes dependendo do
LANGUAGE
configuração usada. Britânico
SET LANGUAGE British; SELECT ISDATE('20/01/2000') AS '20/01/2000 in British';
Resultado:
Changed language setting to British. +-------------------------+ | 20/01/2000 in British | |-------------------------| | 1 | +-------------------------+
br_english
SET LANGUAGE us_english; SELECT ISDATE('20/01/2000') AS '20/01/2000 in us_english';
Resultado:
Changed language setting to us_english. +----------------------------+ | 20/01/2000 in us_english | |----------------------------| | 0 | +----------------------------+
Isso acontece porque
British
usa o dd/MM/aaaa formato enquanto us_english
usa MM/dd/aaaa . Exemplo 5 – Suas configurações de DATEFORMAT
Como mencionado, o valor de retorno de
ISDATE()
também depende do seu DATEFORMAT
definições. Aqui está um exemplo para demonstrar como o mesmo valor pode retornar resultados diferentes dependendo do
DATEFORMAT
configuração usada. dmy
SET DATEFORMAT dmy; SELECT ISDATE('20/01/2000') AS '20/01/2000 while DATEFORMAT is dmy';
Resultado:
+--------------------------------------+ | 20/01/2000 while DATEFORMAT is dmy | |--------------------------------------| | 1 | +--------------------------------------+
mdy
SET DATEFORMAT mdy; SELECT ISDATE('20/01/2000') AS '20/01/2000 while DATEFORMAT is mdy';
Resultado:
+--------------------------------------+ | 20/01/2000 while DATEFORMAT is mdy | |--------------------------------------| | 0 | +--------------------------------------+