2011-09-15 5 views
27

나는 다음과 같은 T-SQL 건너했습니다중괄호

SELECT {d'9999-12-31'} 

9999-12-31 00:00:00.000을 반환한다.

이것은 문자열 리터럴 유형을 DATETIME으로 변환하는 것으로 보입니다. 이 구문에 대한 설명서를 찾을 수 없으며 어떤 변형이 있는지 궁금합니다. 예를 들어 1이라는 리터럴을 가지고 있지만 BIGINTCONVERT()/CAST()을 사용하지 않고 이것을 나타내기를 원합니다.

누구든지이 구문에 대한 추가 정보를 제공 할 수 있습니까? 감사.

+0

는 시도''{ 'i'9999-12-31}을 선택합니다. 보시다시피, '나는'ODBC 날짜/시간 확장을위한 옵션이 아니라는 오류가 있습니다. 이런 식으로 google을 시도하십시오 – rabudde

+2

이것은 ODBC datetime 형식으로 알려져 있습니다. –

답변

42

이들은 ODBC 이스케이프 시퀀스입니다. 자세한 내용은 Date, Time, and Timestamp Escape Sequences을 참조하십시오.

uniqueidentifiers

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

감사합니다. @Martin. 이 구문을 사용하는 것이 좋은 생각이 아닌 이유가 있습니까? 표준 SQL보다 덜 호환/호환됩니까? –

+0

@Tom - 그럴 생각이 없습니다. "ODBC 이스케이프 시퀀스"에 대한 구글은 SQL Server와 관련없는 많은 것들을 다시 가져옵니다. 그래서 상당히 표준 적으로 구현 된 것처럼 보이지만 실제로 그것에 대해 더 많은 것을 알지 못합니다! –