我遇到了以下 t-sql:
SELECT {d'9999-12-31'}
返回9999-12-31 00:00:00.000
。
这似乎是将字符串文字的类型转换为DATETIME
。我找不到有关此语法的任何文档,我想知道是否有任何变化,例如,如果我有一个文字 1
但想用 BIGINT
表示它> 不使用 CONVERT()
/CAST()
。
任何人都可以提供有关此语法的更多信息吗?谢谢。
最佳答案
这些是 ODBC 转义序列。请参阅Date, Time, and Timestamp Escape Sequences了解更多详情。
唯一标识符也有类似的语法
选择{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
关于sql - T-SQL 中的大括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7428538/