Фигурные скобки в T-SQL - PullRequest
       12

Фигурные скобки в T-SQL

30 голосов
/ 15 сентября 2011

Я сталкивался со следующим t-sql:

SELECT {d'9999-12-31'}

, который возвращает 9999-12-31 00:00:00.000.

Это, кажется, преобразовывает тип строкового литерала в DATETIME.Я не могу найти никакой документации по этому синтаксису, и мне интересно, есть ли какие-либо варианты, например, если у меня есть литерал 1, но я хочу представить это в BIGINT без использования CONVERT() / CAST().

Может ли кто-нибудь предоставить дополнительную информацию об этом синтаксисе?Спасибо.

1 Ответ

47 голосов
/ 15 сентября 2011

Это escape-последовательности ODBC. Подробнее см. Дата, время и последовательности сброса метки времени .

Существует также аналогичный синтаксис для уникальных идентификаторов

SELECT {guid '00000000-0000-0000-0000-000000000000'},

, а также вызовы процедур и некоторые другие конструкции, подробно описанные в этой ссылке.

Что касается остальной части вашего вопроса, я не знаю ни одного способа, чтобы целочисленный литерал рассматривался как bigint или какой-либо конкретный ресурс, который перечисляет все способы влияния на то, как литералам назначаются типы данных SQL Server. , Некоторые способы приведены ниже.

;WITH cte(thing) AS
(
SELECT CAST(1 AS SQL_VARIANT) UNION ALL
SELECT $1 UNION ALL
SELECT 1e0 UNION ALL
SELECT 1.0000 UNION ALL
SELECT 2147483648 UNION ALL 
SELECT {ts '2011-09-15 01:23:56.123'}  UNION ALL
SELECT {d '2011-09-15'} UNION ALL
SELECT { t '13:33:41' }  UNION ALL
SELECT {guid '00000000-0000-0000-0000-000000000000'} UNION ALL
SELECT 'Foo' UNION ALL
SELECT N'Foo'
)
SELECT thing, 
       sql_variant_property(thing,'basetype') AS basetype,
       sql_variant_property(thing,'precision') AS precision, 
       sql_variant_property(thing,'scale') AS scale, 
       sql_variant_property(thing,'maxlength') AS maxlength
FROM cte

Возвращает

thing                          basetype            precision   scale  maxlength
------------------------------ ------------------- ----------- ------ ---------
1                              int                 10          0      4
1.00                           money               19          4      8
1                              float               53          0      8
1.0000                         numeric             5           4      5
2147483648                     numeric             10          0      5
2011-09-15 01:23:56.123        datetime            23          3      8
2011-09-15 00:00:00.000        datetime            23          3      8
2011-09-15 13:33:41.000        datetime            23          3      8
00000000-0000-0000-0000-000000 uniqueidentifier    0           0      16
Foo                            varchar             0           0      3
Foo                            nvarchar            0           0      6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...