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