Sql Server 2012変換関数の比較(Cast、Convert、Parse)

2520 ワード

構文:
1. Cast
構文:CAST(expression AS data_type[(length)]
2. Convert
構文:CONVERT(data_type[(length)],expression[,style])
3. Parse
構文:PARSE(string_value AS data_type[USING culture])
ここで、ParseがSql Serverの新しいプロパティexpressionは、変換されたタイプの文字列形式でなければなりません.
パフォーマンス分析:
まとめ:
1.ConvertとCastの違いCONVERTはSQL Server専用で、日付と時間の値、小数の間の変換をより柔軟にします.
CASTは、2つの機能の中でANSI規格を備えた機能です.すなわち、より携帯性がある(例えば、CASTの関数を使用すると他のデータベースソフトウェアでより容易に使用できる)が、機能は比較的弱いです.ただし、小数を数値に変換し、元の式の小数値を保持する場合は、CASTを使用する必要があります.
2.ConvertとParseの違い文法の違いを除いて、機能上の違いである.Convertの機能はもっと強く、ParseはSql Server 2012に追加された機能である.同時に機能が弱く、文字列を数字タイプまたは日付タイプに変換するしかない.数字タイプまたは日付タイプの長さが小さいため、だからParseがもたらす性能はほとんど大きく変わることはできません.その後、私も多くの比較をしました.Parseはほとんどの場合に取って代わることができることに気づきました.
3.総合比較a.Sql Server向けの開発を行う場合はConvertメソッドのみを推奨
b.文がプラットフォームにまたがることを考慮するならば、できるだけCastを使って、例えばSQL文はSql Serverの上で実行することができて、またMySqlの上で実行することができます
c.ParseはSql Server 2012の中で1つの鶏の肋骨で、1午后の実戦研究とMSDNをめくって、すべてその优位性を探し当てていないで、もし文法より、Castの文法の构造はそれと同じならば、もし机能より、また弱すぎて、CastとConvertと完全に比较することができなくて、だから、あなたはParseを忘れましょう
性能分析の実験:
1.ConvertとParseを文字列に変換する比較
 
  
DBCC FreeProcCache
set statistics profile on
select top 1 parse(name as bigint) from test_Parse
select top 1 convert(bigint,name) from test_Parse

nameはnvarchar(1000)のセグメントで、値は1231231238912378912128です.
実行してみると、CPUの消費量とIOの消費量とで性能の差は全くない.
2.MoneyとDateTimeタイプの変換比較
 
  
-- DateTime
DBCC FreeProcCache
declare @date varchar(100) = '2012/07/19 14:57:09.760'
select CONVERT(datetime,@date) as date
select Parse(@date as datetime using 'zh-CN') as date
--Money
SELECT PARSE('�345,98' AS money USING 'de-DE') AS Result
Select Convert(money,'�345,98',1) AS Result

3.Parseの特許、文字型日付からdatetimeへの変換
 
  
SELECT PARSE('Monday, 13 December 2010' AS datetime2 USING 'en-US') AS Result
SELECT PARSE('Monday, 13 December 2010' AS datetime2 USING 'zh-CN') AS Result
-- Cast Convert
--SELECT cast('Monday, 13 December 2010' AS datetime2) AS Result
--SELECT Convert(datetime,'Monday, 13 December 2010') AS Result

性能の面では同じように違いはありませんが、機能を比較すると、ParseはConvertよりずっと間違っています.
深く疑って、Parse本人はべつに多くの優勢と応用シーンを探し当てていないで、あるいは私がやっと浅くて、もっと良いことが探し出せないため、知っていて、教えてください