No SQL Server, quando você usa o T-SQL
FORMAT()
função para formatar uma hora tipo de dados, você precisa se lembrar de escapar quaisquer dois pontos ou pontos em sua string de formato. Isso ocorre porque o
FORMAT()
A função depende de regras de formatação CLR, que determinam que os dois pontos e os pontos devem ser escapados. Portanto, quando a string de formato (segundo parâmetro) contém dois pontos ou ponto, os dois pontos ou ponto devem ser escapados com barra invertida quando um valor de entrada (primeiro parâmetro) é do tempo tipo de dados. Exemplo 1 – Fuga de dois pontos
Veja um exemplo básico de como usar o
FORMAT()
função para formatar uma hora tipo de dados. SELECT FORMAT(CAST('11:28:15' AS time), 'hh\:mm') Result;
Resultado:
+----------+ | Result | |----------| | 11:28 | +----------+
Observe a barra invertida na string de formato.
Exemplo 2 – Fuga de um período
A mesma coisa se aplica se quisermos formatá-lo com um ponto:
SELECT FORMAT(CAST('11:28:15' AS time), 'hh\.mm') Result;
Resultado:
+----------+ | Result | |----------| | 11.28 | +----------+
Exemplo 3 – Sem escape
Aqui está o que acontece se não escaparmos dos dois pontos ou ponto final.
SELECT FORMAT(CAST('11:28:15' AS time), 'hh:mm') 'Unescaped Colon', FORMAT(CAST('11:28:15' AS time), 'hh.mm') 'Unescaped Period';
Resultado:
+-------------------+--------------------+ | Unescaped Colon | Unescaped Period | |-------------------+--------------------| | NULL | NULL | +-------------------+--------------------+
Obtemos
NULL
em ambos os casos. Exemplo 4 – Data e hora (sem necessidade de escape)
Você só precisa escapar dos dois pontos e do ponto final se o valor de entrada for do tipo de dados hora . Se for datahora (ou datetime2 etc), você não precisa escapar deles.
Se eu usar o exemplo anterior, mas mudar os valores de entrada para datetime2 , obtemos o resultado desejado sem precisar escapar de nada:
SELECT FORMAT(CAST('11:28:15' AS datetime2), 'hh:mm') 'Unescaped Colon', FORMAT(CAST('11:28:15' AS datetime2), 'hh.mm') 'Unescaped Period';
Resultado:
+-------------------+--------------------+ | Unescaped Colon | Unescaped Period | |-------------------+--------------------| | 11:28 | 11.28 | +-------------------+--------------------+
O mesmo se aplica a sysdatetime :
SELECT FORMAT(SYSDATETIME(), 'hh:mm') 'Unescaped Colon', FORMAT(SYSDATETIME(), 'hh.mm') 'Unescaped Period';
Resultado:
+-------------------+--------------------+ | Unescaped Colon | Unescaped Period | |-------------------+--------------------| | 04:46 | 04.46 | +-------------------+--------------------+