夏椰の東屋

- お遊び記録 -

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  108  : 記事  1  : コメント  3958  : トラックバック  30

ニュース


落書きしてね♪

IAM
僕がとった写真です。
ご自由にお使いください。

フィードメーター - 夏椰の東屋 track feed
広告


記事カテゴリ

書庫

日記カテゴリ

Other Site From Kaya

データ型の優先順位 (Transact-SQL)にて SQLServer2008に新たに増えたデータ型「datetimeoffset」「datetime2」は
datetimeよりも優先順位が上に書かれています。

では、本当にそうなのか検証してみます。

まずは、データ型をチェックする関数を作成します。

create function [dbo].[GetProp](@col as sql_variant)
returns 
 @ret table(
  [BaseType] varchar(max),
  [Precision] int,
  [Scale] int,
  [TotalBytes] int,
  [Collation] varchar(max),
  [MaxLength] int
 )
begin
 insert into @ret 
 select
 cast(SQL_VARIANT_PROPERTY (@col,'BaseType') as varchar(max)) as 'BaseType',
 cast(SQL_VARIANT_PROPERTY (@col,'Precision') as int) as 'Precision',
 cast(SQL_VARIANT_PROPERTY (@col,'Scale') as int) as 'Scale',
 cast(SQL_VARIANT_PROPERTY (@col,'TotalBytes') as int) as 'TotalBytes',
 cast(SQL_VARIANT_PROPERTY (@col,'Collation') as varchar(max)) as 'Collation',
 cast(SQL_VARIANT_PROPERTY (@col,'MaxLength') as int) as 'MaxLength';
 return;
end ;
 


では、この関数を使って、
  • datetime + datetimeoffset
  • datetime + datetime2
2パターンの加算をしてみたいと思います。


SELECT * FROM
GetProp(
CAST('2007-01-01 23:59:59' as datetime)
 + 
CAST('1900-01-01 00:00:01.000' as datetime2)
)
SELECT * FROM
GetProp(
CAST('2007-01-01 23:59:59' as datetime)
 + 
CAST('1900-01-01 00:00:01.000 -9:00' as datetimeoffset)
)
 


この2つのSQLを実際に動かした結果は以下のとおりです。


BaseType Precision Scale TotalBytes Collation MaxLength
datetime 23 3 10 NULL 8
datetime 23 3 10 NULL 8


あれ・・・・って感じですよね。

GetProp関数内で使用しているSQL_VARIANT_PROPERTYが未対応なのかしら?と思って、
テーブルを作成してみました。



CREATE TABLE [dbo].[tb2](
 [dto] [datetimeoffset](7) NOT NULL,
 [dt] [datetime] NOT NULL,
 [dto+dt]  AS ([dto]+[dt])
) ON [PRIMARY]
 
これにデータを1件突っ込んで表示させてみました。
dto dt dto+dt
1900-01-02 00:00:01.0000000 -09:00 2007-01-01 23:59:59.000 2007-01-03 00:00:00.000


どうみてもdatetimeですね・・・・。

う~んと、とりあえずMSDNライブラリからフィードバック流しておいたけど、
他にしておく事はあるかしらん?
#ちなみにsmalldatetimeでも同様にsmalldatetimeの勝ち!でした・・・
#またまた追記
#  timestamp(30)+varbinary(1) = varbinary(16byte maxlength=70)
#  timestamp(30)+binary(1) = varbinay (42byte maxlength=70)
#またまたまたまた追記
# nchar + varchar = nvarchar
投稿日時 : 2008年10月14日 15:51

コメント

# datetimeoffsetとdatetime2の優先順位 2008/10/14 15:59 夏椰の水琴窟 - Cave of Kaya Singing like Koto by drippin
http://blogs.wankuma.com/kaya/archive/2008/10/14/158788.aspx でも書いた内容をこちらにも・・・。 SQLServer2008から登場したdatetimeoffsetとdatetime2はdatetimeよりも

# XebApOUOUPjeWJqTOO 2011/09/30 2:42 http://oemfinder.com
VlZbJ9 Right from this article begin to read this blog. Plus a subscriber:D

Post Feedback

タイトル
名前
Url:
コメント