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 | +--------------------------------------+