Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Запомнете това, когато форматирате тип данни TIME в SQL Server (T-SQL)

В SQL Server, когато използвате T-SQL FORMAT() функция за форматиране на време тип данни, трябва да запомните да избягвате всички двоеточия или точки във вашия форматен низ.

Това е така, защото FORMAT() функцията разчита на правила за форматиране на CLR, които диктуват, че двоеточия и точки трябва да се избягват. Следователно, когато форматиращият низ (втори параметър) съдържа двоеточие или точка, двоеточието или точката трябва да се екранират с обратна наклонена черта, когато входната стойност (първи параметър) е от време тип данни.

Пример 1 – Изключване на двоеточие

Ето основен пример за използване на FORMAT() функция за форматиране на време тип данни.

SELECT FORMAT(CAST('11:28:15' AS time), 'hh\:mm') Result;

Резултат:

+----------+
| Result   |
|----------|
| 11:28    |
+----------+

Обърнете внимание на обратната наклонена черта във форматиращия низ.

Пример 2 – Бягство от точка

Същото важи и ако искаме да го форматираме с точка:

SELECT FORMAT(CAST('11:28:15' AS time), 'hh\.mm') Result;

Резултат:

+----------+
| Result   |
|----------|
| 11.28    |
+----------+

Пример 3 – Неекраниран

Ето какво се случва, ако не избягаме от дебелото черво или точка.

SELECT 
  FORMAT(CAST('11:28:15' AS time), 'hh:mm') 'Unescaped Colon',
  FORMAT(CAST('11:28:15' AS time), 'hh.mm') 'Unescaped Period';

Резултат:

+-------------------+--------------------+
| Unescaped Colon   | Unescaped Period   |
|-------------------+--------------------|
| NULL              | NULL               |
+-------------------+--------------------+

Получаваме NULL и в двата случая.

Пример 4 – Дата и час (няма нужда да се избягва)

Трябва да избягвате двоеточието и точката само ако входната стойност е от тип данни време . Ако е дата и час (или datetime2 и т.н.), не е нужно да им избягвате.

Ако използвам предишния пример, но превключвам входните стойности на datetime2 , получаваме желания резултат, без да е необходимо да избягваме нищо:

SELECT 
  FORMAT(CAST('11:28:15' AS datetime2), 'hh:mm') 'Unescaped Colon',
  FORMAT(CAST('11:28:15' AS datetime2), 'hh.mm') 'Unescaped Period';

Резултат:

+-------------------+--------------------+
| Unescaped Colon   | Unescaped Period   |
|-------------------+--------------------|
| 11:28             | 11.28              |
+-------------------+--------------------+

Същото важи и за sysdatetime :

SELECT 
  FORMAT(SYSDATETIME(), 'hh:mm') 'Unescaped Colon',
  FORMAT(SYSDATETIME(), 'hh.mm') 'Unescaped Period';

Резултат:

+-------------------+--------------------+
| Unescaped Colon   | Unescaped Period   |
|-------------------+--------------------|
| 04:46             | 04.46              |
+-------------------+--------------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да избера от списък със стойности в SQL Server

  2. можем ли да имаме външен ключ, който не е първичен ключ в никоя друга таблица?

  3. Как работи функцията CHARINDEX() в SQL Server (T-SQL)

  4. Намерете зависимости в SQL Server:sql_expression_dependencies

  5. Как да намерите формата на датата, използван в текущата сесия в SQL Server (T-SQL)