CAST ve CONVERT (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsMicrosoft Fabric'te SQL analitiği uç noktasıMicrosoft Fabric'te DepoMicrosoft Fabric'te SQL veritabanı

Bu işlevler bir veri türünün ifadesini başka bir veri türüne dönüştürür.

Sözdizimi

CAST sözdizimi:

CAST ( expression AS data_type [ ( length ) ] )

CONVERT sözdizimi:

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

Transact-SQL söz dizimi kuralları

Tartışmalar

ifade

Herhangi bir geçerli ifade.

data_type

Hedef veri türü. Buna xml, bigint ve sql_variant dahildir. Diğer ad veri türleri kullanılamaz.

uzunluk

Kullanıcının belirtilen uzunluğuna izin veren veri türleri için hedef veri türünün uzunluğunu belirten isteğe bağlı bir tamsayı. Varsayılan değer 30'dur.

üslup

Fonksiyonun CONVERTifadeyi nasıl çevirdiğini belirten tam sayı ifadesi. Stil değeri için NULL, NULL döner. data_type aralığı belirler.

Dönüş türleri

data_type çevrilmiş ifadeyi döndürür.

Tarih ve saat stilleri

Tarih veya saat veri türü ifadesi için stil , aşağıdaki tabloda gösterilen değerlerden birine sahip olabilir. Diğer değerler ise olarak işleniyor.0 SQL Server 2012 (11.x) ile itibaren, tarih ve zaman tiplerinden datetimeoffset'e dönüştürülürken desteklenen tek stiller 0 veya 1'dır. Diğer tüm dönüştürme stilleri 9809 hatası döndürür.

Uyarı

SQL Server Database Engine, tarih formatını Arapça tarzda Kuveyt algoritması ile destekler.

Yüzyıl olmadan (yy) 1 Century (yyy) ile Standart Giriş/çıkış 3
- 0veya 1001,2 Datetime ve smalldatetime için varsayılan MMM dd yyyy hh:mmtt (tt ise AM veya PM)
1 101 ABD 1 = MM/dd/yy
101 = MM/dd/yyyy
2 102 Amerikan Ulusal Standartlar Enstitüsü (ANSI) 2 = yy.MM.dd
102 = yyyy.MM.dd
3 103 İngiliz/Fransızca 3 = dd/MM/yy
103 = dd/MM/yyyy
4 104 Almanca 4 = dd.MM.yy
104 = dd.MM.yyyy
5 105 İtalyanca 5 = dd-MM-yy
105 = dd-MM-yyyy
6 106 1 - 6 = dd MMM yy
106 = dd MMM yyyy
7 107 1 - 7 = MMM dd, yy
107 = MMM dd, yyyy
8 veya 24 108 - HH:mm:ss
- 9veya 1091,2 Varsayılan + milisaniye MMM dd yyyy hh:mm:ss:ffftt (tt ise AM veya PM)
10 110 ABD 10 = MM-dd-yy
110 = MM-dd-yyyy
11 111 Japan 11 = yy/MM/dd
111 = yyyy/MM/dd
12 112 ISO 12 = yyMMdd
112 = yyyyMMdd
- 13veya 1131,2 Avrupa varsayılan + milisaniye dd MMM yyyy HH:mm:ss:fff (24 saat)
14 114 - HH:mm:ss:fff (24 saat)
- 20 veya 1202 ODBC kurallı yyyy-MM-dd HH:mm:ss (24 saat)
- 21 ya 25 da 1212 Saat, tarih, tarih saat2 ve datetimeoffset için ODBC kurallı (milisaniye ile) varsayılanı yyyy-MM-dd HH:mm:ss.fff (24 saat)
22 - ABD MM/dd/yy hh:mm:ss tt (tt ise AM veya PM)
- 23 ISO8601 yyyy-MM-dd
- 126 4 ISO8601 yyyy-MM-ddTHH:mm:ss.fff (boşluk yok) 6
- 127 8, 9 Z saat dilimiyle ISO8601 yyyy-MM-ddTHH:mm:ss.fffZ (boşluk yok) 6
- 130 1,2 Hicri 5 dd MMMM yyyy hh:mm:ss:ffftt 7
- 131 2 Hicri 5 dd/MM/yyyy hh:mm:ss:ffftt

1 Bu stil değerleri belirsiz sonuçlar döndürür. Tüm () (yyyüzyıl olmadan) stillerini ve () (yyyycentury) stillerinin bir alt kümesini içerir.

2 Varsayılan değerler (0 veya 100, 9 , 13109ya , , veya 113, 2320 , 120, ve 21 veya 25 veya 121) her zaman yüzyılı ().yyyy

Önemli

Varsayılan olarak, SQL Server Database Engine 2049 kesim yılına göre iki haneli yılları yorumlar. Bu, Database Engine'in iki haneli 49 yılı 2049, iki haneli 50 yılı ise 1950 olarak yorumladığı anlamına gelir. Otomasyon nesnelerini temel alan uygulamalar da dahil olmak üzere birçok istemci uygulaması 2030'un kesme yılını kullanır. Database Engine, Database Engine tarafından kullanılan cutoff yılını değiştirmek için iki haneli bir yıl kesme yılı yapılandırma seçeneği sunar. Bu, tarihlerin tutarlı bir şekilde işlenmesini sağlar. Dört basamaklı yıl belirtmenizi öneririz.

3Datetime'a dönüştürdüğünüzde giriş; karakter verilerine dönüştürdüğünüzde çıkış.

4 XML kullanımı için tasarlanmıştır. datetime veya smalldatetime'dan karakter verilerine dönüştürme için çıkış biçimi için önceki tabloya bakın.

5 Hicri, çeşitli varyasyonlara sahip bir takvim sistemidir. Database Engine, Kuveyt algoritmasını kullanır.

6 Milisaniye (fff) 0 değeri için milisaniye ondalık kesir değeri görüntülenmez. Örneğin, değer 2022-11-07T18:26:20.000 olarak 2022-11-07T18:26:20görüntülenir.

7 Bu stilde, MMMM tam ay adının çok belirteçli Hicri Unicode gösterimini temsil eder. Bu değer, SSMS'nin varsayılan ABD yüklemesinde doğru şekilde işlenmez.

8 Yalnızca karakter verilerinden datetime veya smalldatetime'a türerken desteklenir. Datetime veya smalldatetime veri türlerine yalnızca tarih veya saat bileşenlerini temsil eden karakter verileri yayınlanırken, belirtilmeyen saat bileşeni olarak 00:00:00.000ayarlanır ve belirtilmeyen tarih bileşeni olarak 1900-01-01ayarlanır.

9 Saat dilimi bilgisi olan XML tarih-saat değerlerini, saat dizimi olmayan Database Engine tarih-saat değerleriyle eşleştirmeyi kolaylaştırmak için isteğe bağlı saat dilimi göstergesini Z kullanın. Z UTC-0 saat dilimini gösterir. HH:mm Veya + yönündeki - uzaklık, diğer saat dilimlerini gösterir. Örneğin: 2022-12-12T23:45:12-08:00.

Smalldatetime karakter verilerine dönüştürülürken, saniye veya milisaniye içeren stiller bu konumlarda sıfırları gösterir. datetime veya smalldatetime değerlerinden dönüştürürken, istenmeyen tarih bölümlerinin kesilmesi için uygun karakter veya varchar veri türü uzunluğunu kullanın.

Karakter verilerini datetimeoffset'e dönüştürürken, saat içeren bir stil kullanıldığında, sonuca saat dilimi uzaklığı eklenir.

float ve gerçek stiller

Kayan veya gerçekifade için stil aşağıdaki tabloda gösterilen değerlerden birine sahip olabilir. Diğer değerler ise olarak işleniyor.0

Değer Çıktı
0 (varsayılan) En fazla 6 basamak. Uygun olduğunda bilimsel gösterimi kullanın.
1 Her zaman 8 basamak. Bilimsel gösterimi her zaman kullanın.
2 Her zaman 16 basamak. Bilimsel gösterimi her zaman kullanın.
3 Her zaman 17 basamak. Kayıpsız dönüştürme için kullanın. Bu stilde, her ayrı kayan veya gerçek değerin ayrı bir karakter dizesine dönüştürülmesi garanti edilir.

Şunlar için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümleri ve Azure SQL Veritabanı.
126, 128, 129 Eski nedenlerle dahil. Bu değerleri yeni geliştirme için kullanmayın.

para ve smallmoney stilleri

Bir money veya smallmoneyifadesi için, stil aşağıdaki tabloda gösterilen değerlerden birine sahip olabilir. Diğer değerler ise olarak işleniyor.0

Değer Çıktı
0 (varsayılan) Ondalık noktasının solundaki her üç basamakta virgül ve ondalık noktasının sağındaki iki basamak yok

Örnek: 4235.98.
1 Ondalık noktasının solundaki her üç basamakta bir virgül ve ondalık noktasının sağındaki iki basamak

Örnek: 3.510,92.
2 Ondalık noktasının solundaki her üç basamakta virgül ve ondalık noktasının sağındaki dört basamak yok

Örnek: 4235.9819.
126 Char(n) veya varchar(n)'ye dönüştürüldüğünde tarza 2eşdeğer

xml stilleri

Bir xmlifadesi için, stil aşağıdaki tabloda gösterilen değerlerden birine sahip olabilir. Diğer değerler ise olarak işleniyor.0

Değer Çıktı
0 (varsayılan) Önemsiz boşlukları atan ve iç DTD alt kümesine izin verilmeyen varsayılan ayrıştırma davranışını kullanın.

Not:xml veri tipine dönüştürülürken, Database Engine önemsiz boşlukları XML 1.0'dan farklı şekilde işler. Daha fazla bilgi için, bkz. Create instances of XML verisi.
1 Önemsiz boşlukları koruyun. Bu stil ayarı, varsayılan xml:space işlemeyi davranışıyla xml:space="preserve"eşleşecek şekilde ayarlar.
2 Sınırlı iç DTD alt kümesi işlemeyi etkinleştirin.

Etkinleştirilirse, sunucu, bir iç DTD alt kümesinde sağlanan aşağıdaki bilgileri kullanarak doğrulanmayan ayrıştırma işlemleri gerçekleştirebilir.

- Öznitelikler için varsayılanlar uygulanır
- İç varlık başvuruları çözümlenir ve genişletilir
- DTD içerik modeli, sağlamlık açısından denetlenir

Ayrıştırıcı dış DTD alt kümelerini yoksayar. Ayrıca, bağımsız özniteliğin bir yes veya no değeri olup olmadığını görmek için XML bildirmesini değerlendirmez. Bunun yerine, XML örneğini tek başına bir belge olarak ayrıştırıyor.
3 Önemsiz boşlukları koruyun ve sınırlı iç DTD alt kümesi işlemeyi etkinleştirin.

İkili stiller

İkili(n), karakter(n), varbinary(n)veya varchar(n)ifadesi için, stil aşağıdaki tabloda gösterilen değerlerden birine sahip olabilir. Tabloda listelenmeyen stil değerleri hata döndürür.

Değer Çıktı
0 (varsayılan) ASCII karakterlerini ikili baytlara veya ikili baytları ASCII karakterlerine çevirir. Her karakter veya bayt 1:1'e dönüştürülür.

İkili data_type için, karakterler 0x sonucun soluna eklenir.
1, 2 İkili data_type için ifade bir karakter ifadesi olmalıdır. İfadeninçift sayıda onaltılık rakamı olmalıdır (0, 1, 2, E376859AFDa4CB, ). bcdef Eğer stil ayarlıysa1, ifadenin 0x ilk iki karakteri olmalıdır. İfade tek sayıda karakter içeriyorsa veya karakterlerden biri geçersizse bir hata oluşur.

Dönüştürülen ifadenin uzunluğu data_type uzunluğunu aşarsa, sonuç sağ kesilmiş olur.

Dönüştürülen sonuçtan daha büyük olan data_typeuzunluğu sabittir ve sonucun sağındaki sıfırlar eklenir.

Tür karakteri data_type ikili ifade gerektirir. Her ikili karakter iki onaltılık karaktere dönüştürülür. Dönüştürülen ifadenin uzunluğunun data_type uzunluğunu aştığını varsayalım. Bu durumda kesilir.

Sabit boyutlu karakter türü data_type, dönüştürülen sonucun uzunluğu data_type uzunluğundan küçükse, çift sayıda onaltılık basamak tutmak için dönüştürülen ifadenin sağındaki boşluklar eklenir.

Karakterler 0x , stil2 açısından dönüştürülmüş sonucun soluna eklenmiyor.

Örtük dönüştürmeler

Örtük dönüştürmeler, işlevin veya işlevin CAST belirtimini CONVERT gerektirmez. Açık dönüştürmeler işlevin veya işlevin CAST belirtimini CONVERT gerektirir. Aşağıdaki illüstrasyon, Database Engine sistem tarafından sağlanan veri tipleri için izin verilen tüm açık ve örtük veri tipi dönüşümlerini göstermektedir. Bunlar arasında bigint, sql_variant, xml, hiyerarşi,coğrafya, geometri, json ve vektör bulunur. json ve vector veri türleri yalnızca SQL Server 2025 (17.x), Azure SQL Veritabanı, Azure SQL Yönetilen Örneği ve SQL database in Microsoft Fabric'te mevcuttur. sql_variant veri tipinden atamada örtük bir dönüşüm yok, ama sql_variant'ye örtük dönüşüm var.

SQL Server veri tipleri arasındaki dönüşümlerin açık, örtük veya izin verilmediğini gösteren diyagram, hiyerarşi, coğrafya, geometri, json ve vektör veri türleri dahil.

Yukarıdaki grafik, Database Engine'de izin verilen tüm açık ve örtük dönüşümleri gösterir, ancak dönüşümün veri türü, gerçekleştirilen işleme bağlıdır:

  • Açık dönüştürmeler için, sonuçta elde edilen veri türünü deyiminin kendisi belirler.
  • Örtük dönüştürmeler için, bir değişkenin değerini ayarlama veya sütuna değer ekleme gibi atama deyimleri, değişken bildirimi veya sütun tanımı tarafından tanımlanan veri türüyle sonuçlanır.
  • Karşılaştırma işleçleri veya diğer ifadeler için, sonuçta elde edilen veri türü veri türü önceliği kurallarına bağlıdır.

Bazı veri türleri için sonuç, veri türünün nasıl ilan edildiğine bağlıdır:

  • ondalık ve sayısal: Database Engine, hassasiyet ve ölçek kombinasyonlarını farklı bir veri türü olarak ele alır. Aralarındaki dönüşüm örtük olabilir. Hedef ölçekten daha fazla ondalık basamayı içeren bir değer, hatasız olarak yumallaştırılır. Hedef hassasiyeti için çok büyük bir değer, 8115 hatasına neden olur, ancak ARITHABORT ve ANSI_WARNINGS ikisi OFFde ise; o zaman sonuç olur NULL.
  • Varchar(max), nvarchar(max) ve varbinary(max)diye sql_variant'ye dönüştüremezsiniz.
  • Farklı CLR kullanıcı tanımlı tipler arasında dönüşüm yasaktır.
  • Tiplenmemiş xml ile tiplenmiş xml arasında, ayrıca aynı XML şema koleksiyonunu ve aynı DOCUMENT veya CONTENT yüzeyi kullanan tiplenmiş xml değerleri arasında örtük dönüşüm desteklenir.
  • Farklı XML şema koleksiyonları arasında veya farklı DOCUMENT ve CONTENT yüzeyler arasında dönüşüm açıkça yapılmalıdır. CLR kullanıcı tanımlı tip ile tiplenmiş xml arasında dönüşüm yasaktır.
  • Vektör değerleri arasında dönüşüm yalnızca boyutlar ve temel tipi (float32 veya float16) aynı olduğunda izin verilir.

Grafikte izin verilen bir dönüşüm yine de belirli bir değer için başarısız olabilir; örneğin geçerli olmayan bir dizi ya da farklı boyutlu bir vektör. Görüntü, ntext, metin, xml, coğrafya, geometri, json ve vektör veri türlerinin değerleri, her iki değerin de aynı veri tipine sahip olsa bile eşit (=) operatörüyle karşılaştırılamaz.

Tavsiye

Veri türü önceliğini dönüştürmelerdeki etkileri hakkında pratik bir örnek bu bölümün devamında görülebilir.

datetimeoffset ile char, nchar, nvarchar ve varchar karakter türleri arasında dönüştürme yaptığınızda, dönüştürülen saat dilimi uzaklık bölümü her zaman hem hem HHde mm için çift basamaklı olmalıdır. Örneğin, -08:00.

nchar ve nvarchar veri tipleri, Unicode verilerini UTF-16 kodlamasında saklar; bu kodlama her zaman çift sayıda bayt kullanır. Nchar veya nvarchar'danikili veya varbinary dönüştürürken dikkatli olun. Örneğin, aşağıdaki dönüşüm 'nin onaltılık değerini 41döndürmez. Onaltılık bir değer döndürür:4100

SELECT CAST (CAST (0x41 AS NVARCHAR) AS VARBINARY);

Daha fazla bilgi için bkz. Harmanlama ve Unicode desteği.

Büyük değerli veri türleri

Büyük değerli veri türleri, özellikle nvarchar, varbinary ve varchar veri türleri gibi küçük karşılıklarıyla aynı örtük ve açık dönüştürme davranışına sahiptir. Ancak aşağıdaki yönergeleri göz önünde bulundurun:

  • Görüntüdenvarbinary(max)'e dönüştürme ve tam tersi, metin ile varchar(max), ntext ve nvarchar(max)arasındaki dönüştürmeler gibi örtük dönüştürme olarak çalışır.
  • Varchar(max) gibi büyük değerli veri türlerinden varchar gibi daha küçük bir karşılık gelen veri türüne dönüştürme örtük bir dönüştürmedir, ancak büyük değerin boyutu daha küçük veri türünün belirtilen uzunluğunu aşarsa kesme gerçekleşir.
  • nvarchar, varbinary veya varchar'dan karşılık gelen büyük değerli veri türlerine dönüştürme örtük olarak gerçekleşir.
  • sql_variant veri türünden büyük değerli veri türlerine dönüştürme açık bir dönüştürmedir.
  • Büyük değerli veri türleri sql_variant veri türüne dönüştürülemez.

XML veri tipinden dönüşüm hakkında daha fazla bilgi için bkz. Oluştur XML veri örnekleri.

xml veri türü

Xml veri türünü bir dizeye veya ikili veri türüne açıkça veya örtük olarak yayınladığınızda, xml veri türünün içeriği tanımlı bir kural kümesine göre serileştirilir. Bu kurallar hakkında bilgi için bkz. XML verilerinin serializasyonunu tanımla. Diğer veri tiplerinden xml veri tipine dönüşüm hakkında bilgi için bkz . Oluştur XML veri örnekleri.

metin ve görüntü veri türleri

Metin ve görüntü veri türleri otomatik veri türü dönüştürmeyi desteklemez. Metin verilerini açıkça karakter verilerine, görüntü verilerini de ikili veya varbinary'ye dönüştürebilirsiniz, ancak uzunluk üst sınırı 8000 bayttır. Yanlış bir dönüştürme denerseniz, örneğin harfler içeren bir karakter ifadesini int'ye dönüştürmeye çalışırsanız, Database Engine hata mesajı döner.

Çıkış harmanlaması

veya CAST işlevleri bir karakter dizesi çıktısı CONVERT aldığında ve bir karakter dizesi girişi aldığında, çıkış girişle aynı harmanlama ve harmanlama etiketine sahiptir. Giriş bir karakter dizesi değilse, çıkışta veritabanının varsayılan harmanlaması ve coercible-default harmanlama etiketi bulunur. Daha fazla bilgi için Harmanlama önceliği'e bakın.

Çıktıya farklı bir derleme atamak için, bu maddeyi COLLATE veya CAST fonksiyonunun CONVERT sonuç ifadesine uygulayın. Örneğin:

SELECT CAST ('abc' AS VARCHAR (5)) COLLATE French_CS_AS;

Kesme ve yuvarlama sonuçları

Karakter veya ikili ifadeleri (ikili, karakter, nchar, nvarchar, varbinary veya varchar) farklı bir veri türündeki bir ifadeye dönüştürürken, dönüştürme işlemi çıkış verilerini kesebilir, yalnızca çıkış verilerini kısmen görüntüleyebilir veya hata döndürebilir. Bu durumlar, sonuç gösterilemez kadar kısa olduğunda ortaya çıkar. İkili, karakter, nchar, nvarchar, varbinary veya varchar dönüştürmeleri, aşağıdaki tabloda gösterilen dönüştürmeler dışında kesilir.

Veri türünden Veri türüne Sonuç
int, smallint veya tinyint Char
varchar
Görüntülenemeyecek kadar kısa
nchar
nvarchar
Hata 1
money, smallmoney, sayısal, ondalık, kayan veya gerçek Char
varchar
Hata 1
nchar
nvarchar
Hata 1

1 Sonuç uzunluğu görüntülenemeyecek kadar kısa olduğundan hata döndürüldü.

SQL Server Database Engine, yalnızca dönüş dönüşümlerinin, yani bir veri tipini orijinal veri tipinden geri dönüştüren dönüşümlerin, versiyondan versiyona aynı değerleri vermesini garanti eder. Aşağıdaki örnekte böyle bir gidiş dönüş dönüştürme gösterilmektedir:

DECLARE @myval AS DECIMAL (5, 2);
SET @myval = 193.57;

SELECT CAST (CAST (@myval AS VARBINARY (20)) AS DECIMAL (10, 5));

-- Or, using CONVERT
SELECT CONVERT (DECIMAL (10, 5), CONVERT (VARBINARY (20), @myval));
GO

Uyarı

İkili değerler oluşturmayın ve sonra bunları sayısal veri türü kategorisinin veri türüne dönüştürün. Database Engine, ondalık veya sayısal veri tipi dönüşümün, ikili biçime dönüşümün, SQL Server sürümleri arasında aynı olduğunu garanti etmez.

Aşağıdaki örnekte, görüntülenemeyecek kadar küçük bir sonuç ifadesi gösterilmektedir.

USE AdventureWorks2025;
GO

SELECT p.FirstName,
       p.LastName,
       SUBSTRING(p.Title, 1, 25) AS Title,
       CAST (e.SickLeaveHours AS CHAR (1)) AS [Sick Leave]
FROM HumanResources.Employee AS e
     INNER JOIN Person.Person AS p
         ON e.BusinessEntityID = p.BusinessEntityID
WHERE NOT e.BusinessEntityID > 5;
GO

Sonuç kümesi aşağıdadır.

FirstName   LastName      Title   Sick Leave
---------   ------------- ------- --------`
Ken         Sanchez       NULL   *
Terri       Duffy         NULL   *
Roberto     Tamburello    NULL   *
Rob         Walters       NULL   *
Gail        Erickson      Ms.    *

Ondalık basamaklarda farklı veri türlerini dönüştürdüğünüzde, Database Engine bazen kısaltılmış bir sonuç değeri döndürür, bazen de yuvarlatılmış bir değer döndürür. Bu tabloda davranış gösterilir.

Kaynak İçin Davranış
Sayısal Sayısal Yuvarlak
Sayısal Int Kısalt
Sayısal para Yuvarlak
para Int Yuvarlak
para Sayısal Yuvarlak
yüzmek Int Kısalt
yüzmek Sayısal Yuvarlak 1
yüzmek tarih ve saat Yuvarlak
tarih ve saat Int Yuvarlak

1 Bilimsel gösterim kullanan kayandeğerlerin ondalık veya sayısal olarak dönüştürülmesi yalnızca 17 basamaklı duyarlık değerleriyle sınırlıdır. Duyarlık değeri 17'den yüksek olan tüm değerler sıfıra yuvarlar.

Örneğin, 10.6496 ve -10.6496 değerleri int veya sayısal tiplere dönüşüm sırasında kısaltılabilir veya yuvarlanabilir:

SELECT CAST (10.6496 AS INT) AS trunc1,
       CAST (-10.6496 AS INT) AS trunc2,
       CAST (10.6496 AS NUMERIC) AS round1,
       CAST (-10.6496 AS NUMERIC) AS round2;

Sorgunun sonuçları aşağıdaki tabloda gösterilmiştir:

trunc1 trunc2 yuvarlak1 yuvarlak2
10 -10 11 -11

Hedef veri türünün kaynak veri türünden daha az ondalık basamak bulunduğu veri türleri dönüştürülürken, değer yuvarlanır. Örneğin, bu dönüştürme döndürür $10.3497:

SELECT CAST (10.3496847 AS MONEY);

Database Engine, sayısal olmayan char, nchar, nvarchar veya varchar verilerini ondalık, float, int, sayısal olarak dönüştürürken hata mesajı döndürür. Database Engine ayrıca boş bir dizi ( ) sayısal veya ondalık haline dönüştürüldüğünde de hata döndürür.

Belirli tarih saat dönüştürmeleri belirsizdir

Dizeden tarihe saat dönüştürmesinin belirleyici olmadığı stiller aşağıdaki gibidir:

  • 1 altındaki 100 tüm stiller
  • 106
  • 107
  • 109
  • 113
  • 130

1 Stiller 20 hariç ve 21

Daha fazla bilgi için bkz. Değişmez tarih dizelerini DATE değerlerine dönüştürme.

Ek karakterler (vekil çiftler)

SQL Server 2012'den (11.x) başlayarak, tamamlayıcı karakter (SC) harmanlamaları kullanıldığında, CASTnchar veya nvarchar'dan daha küçük uzunlukta bir nchar veya nvarchar türüne yapılan bir işlem vekil çiftin içinde kesilmez. Bunun yerine, işlem tamamlayıcı karakterden önce kesilir. Örneğin, aşağıdaki kod parçası yalnızca @xöğesini tutarak ayrılırab. Ek karakteri tutmak için yeterli alan yok.

DECLARE @x AS NVARCHAR (10) = 'ab' + NCHAR(0x10000);

SELECT CAST (@x AS NVARCHAR (3));

SC harmanlamaları kullanılırken , davranışı CONVERTile benzerdir CAST. Daha fazla bilgi için bkz. Harmanlama ve Unicode Desteği - Ek Karakterler.

Uyumluluk desteği

SQL Server'ın önceki sürümlerinde, zaman ve tarih saati2 veri tipleri 121için varsayılan stil CAST ve CONVERT işlemler , hesaplanan bir sütun ifadesinde her iki tip kullanıldığı hariç. Hesaplanan sütunlar için varsayılan stil 'dir.0 Bu davranış, hesaplanan sütunlar oluşturulduğunda, otomatik parametreleştirme içeren sorgularda veya kısıtlama tanımlarında kullanıldığında onları etkiler.

Uyumluluk seviyesi110 ve daha üzerinde, CASTzaman ve datetime2 veri türlerindeki ve CONVERT işlemler her zaman varsayılan stil olarak kullanılır121. Bir sorgu eski davranışa dayanıyorsa, , üzerinde daha düşük bir uyumluluk seviyesi 110kullanın veya etkilenen sorguda stili 0 açıkça belirtin.

Uyumluluk düzeyi değeri ve CASTCONVERT için varsayılan stil Hesaplanan sütun için varsayılan stil
< 110 121 0
>= 110 121 121

1 Hesaplanan sütunlar dışında

Veritabanını uyumluluk 110 seviyesine ve daha yüksek seviyelere yükseltmek, diskte saklanan kullanıcı verilerini değiştirmez. Bu verileri uygun şekilde el ile düzeltmeniz gerekir. Örneğin, SELECT INTO yukarıda açıklanan hesaplanmış bir sütun ifadesi içeren bir kaynaktan bir tablo oluşturuyorduysanız, veri (stil 0kullanılarak) hesaplanan sütun tanımı yerine depolanır. Bu verileri manuel olarak güncellemelisiniz ve stil 121ile eşleştirmelisiniz.

Örnekler

Bu makaledeki kod örnekleri, Azure Data SQL Samples Repository GitHub deposundan indirebileceğiniz , AdventureWorksDW2025, veya AdventureWorksLT2025 örnek veritabanını kullanırAdventureWorks2025.

A. Hem CAST hem de CONVERT kullanma

Bu örnekler, liste fiyatının ilk basamasına sahip 3 olan ve değerlerini ListPrice dönüştüren ürünler için ürünün adını alır.

CAST kullanın:

USE AdventureWorks2025;
GO

SELECT SUBSTRING(Name, 1, 30) AS ProductName,
       ListPrice
FROM Production.Product
WHERE CAST (ListPrice AS INT) LIKE '33%';
GO

CONVERT kullanın:

USE AdventureWorks2025;
GO

SELECT SUBSTRING(Name, 1, 30) AS ProductName,
       ListPrice
FROM Production.Product
WHERE CONVERT (INT, ListPrice) LIKE '33%';
GO

Sonuç kümesi aşağıdadır. Örnek sonuç kümesi hem hem CASTde CONVERT için aynıdır.

ProductName                    ListPrice
------------------------------ ---------------------
LL Road Frame - Black, 58      337.22
LL Road Frame - Black, 60      337.22
LL Road Frame - Black, 62      337.22
LL Road Frame - Red, 44        337.22
LL Road Frame - Red, 48        337.22
LL Road Frame - Red, 52        337.22
LL Road Frame - Red, 58        337.22
LL Road Frame - Red, 60        337.22
LL Road Frame - Red, 62        337.22
LL Road Frame - Black, 44      337.22
LL Road Frame - Black, 48      337.22
LL Road Frame - Black, 52      337.22
Mountain-100 Black, 38         3374.99
Mountain-100 Black, 42         3374.99
Mountain-100 Black, 44         3374.99
Mountain-100 Black, 48         3374.99
HL Road Front Wheel            330.06
LL Touring Frame - Yellow, 62  333.42
LL Touring Frame - Blue, 50    333.42
LL Touring Frame - Blue, 54    333.42
LL Touring Frame - Blue, 58    333.42
LL Touring Frame - Blue, 62    333.42
LL Touring Frame - Yellow, 44  333.42
LL Touring Frame - Yellow, 50  333.42
LL Touring Frame - Yellow, 54  333.42
LL Touring Frame - Yellow, 58  333.42
LL Touring Frame - Blue, 44    333.42
HL Road Tire                   32.60

B. Aritmetik işleçlerle CAST kullanma

Bu örnek, yıllık toplam satışları () komisyon yüzdesine (Computed) bölerek tek bir sütun hesaplaması (SalesYTDCommissionPCT) hesaplar. Bu değer en yakın tamsayıya yuvarlanıp bir CASTint veri türüne yuvarlanir.

USE AdventureWorks2025;
GO

SELECT CAST (ROUND(SalesYTD / CommissionPCT, 0) AS INT) AS Computed
FROM Sales.SalesPerson
WHERE CommissionPCT != 0;
GO

Sonuç kümesi aşağıdadır.

Computed
------
379753754
346698349
257144242
176493899
281101272
0
301872549
212623750
298948202
250784119
239246890
101664220
124511336
97688107

C. Birleştirmek için CAST kullanma

Bu örnek, kullanarakcharacter CASTolmayan ifadeleri birleştirir. Veritabanını kullanır AdventureWorksDW2025 .

SELECT 'The list price is ' + CAST (ListPrice AS VARCHAR (12)) AS ListPrice
FROM dbo.DimProduct
WHERE ListPrice BETWEEN 350.00 AND 400.00;

Sonuç kümesi aşağıdadır.

ListPrice
------------------------
The list price is 357.06
The list price is 364.09
The list price is 364.09
The list price is 364.09
The list price is 364.09

D. Daha okunabilir metin oluşturmak için CAST kullanma

Bu örnek, listede sütunu char(10) sütununa dönüştürmek Name için kullanılır CASTSELECT. Veritabanını kullanır AdventureWorksDW2025 .

SELECT DISTINCT CAST (EnglishProductName AS CHAR (10)) AS Name,
                ListPrice
FROM dbo.DimProduct
WHERE EnglishProductName LIKE 'Long-Sleeve Logo Jersey, M';
GO

Sonuç kümesi aşağıdadır.

Name        ListPrice
----------  ---------
Long-Sleev  31.2437
Long-Sleev  32.4935
Long-Sleev  49.99

E. LIKE yan tümcesiyle CAST kullanma

Bu örnek sütun money değerlerini SalesYTD veri türüne ve sonra char(20) veri türüne dönüştürürLIKE, böylece yan tümcesi bunu kullanabilir.

USE AdventureWorks2025;
GO

SELECT p.FirstName,
       p.LastName,
       s.SalesYTD,
       s.BusinessEntityID
FROM Person.Person AS p
     INNER JOIN Sales.SalesPerson AS s
         ON p.BusinessEntityID = s.BusinessEntityID
WHERE CAST (CAST (s.SalesYTD AS INT) AS CHAR (20)) LIKE '2%';
GO

Sonuç kümesi aşağıdadır.

FirstName        LastName            SalesYTD         BusinessEntityID
---------------- ------------------- ---------------- -------------
Tsvi             Reiter              2811012.7151      279
Syed             Abbas               219088.8836       288
Rachel           Valdez              2241204.0424      289

F. Türü yazılan XML ile CONVERT veya CAST kullanma

Bu örnekler, xml veri tipi ve sütunları (SQL Server) kullanılarak veriyi tiplenmiş XML'e dönüştürmek için CONVERT kullanıldığını gösterir.

Bu örnek boşluk, metin ve işaretleme içeren bir dizeyi yazılan XML'e dönüştürür ve tüm önemsiz boşlukları (düğümler arasındaki sınır boşluğu) kaldırır:

SELECT CONVERT (XML, '<root><child/></root>');

Bu örnek, boşluk, metin ve işaretleme içeren benzer bir dizeyi yazılan XML'e dönüştürür ve önemsiz boşluk (düğümler arasındaki sınır boşluğu) korur:

SELECT CONVERT (XML, '<root>          <child/>         </root>', 1);

Bu örnek boşluk, metin ve işaretleme içeren bir dizeyi yazılan XML'ye aktarır:

SELECT CAST ('<Name><FName>Carol</FName><LName>Elliot</LName></Name>' AS XML);

Daha fazla örnek için XML veri örnekleri yarat bölümüne bakınız.

G. TARIH saat verileriyle CAST ve CONVERT kullanma

Değerlerden GETDATE() başlayarak, bu örnek geçerli tarih ve saati görüntüler, geçerli tarih ve saati karakter veri türüyle değiştirmek için kullanır CAST ve ardından tarih ve saati CONVERT biçimde görüntülemek için kullanırISO 8601.

SELECT GETDATE() AS UnconvertedDateTime,
       CAST (GETDATE() AS NVARCHAR (30)) AS UsingCast,
       CONVERT (NVARCHAR (30), GETDATE(), 126) AS UsingConvertTo_ISO8601;
GO

Sonuç kümesi aşağıdadır.

UnconvertedDateTime     UsingCast              UsingConvertTo_ISO8601
----------------------- ---------------------- ------------------------------
2022-04-18 09:58:04.570 Apr 18 2022  9:58AM    2022-04-18T09:58:04.570

Bu örnek, önceki örneğin yaklaşık tersidir. Bu örnekte bir tarih ve saat karakter verileri olarak görüntülenir, karakter verilerini CAST veri türüne dönüştürmek için kullanılır ve ardından karakter verilerini CONVERT veri türüne değiştirmek için kullanılır.

SELECT '2006-04-25T15:50:59.997' AS UnconvertedText,
       CAST ('2006-04-25T15:50:59.997' AS DATETIME) AS UsingCast,
       CONVERT (DATETIME, '2006-04-25T15:50:59.997', 126) AS UsingConvertFrom_ISO8601;
GO

Sonuç kümesi aşağıdadır.

UnconvertedText         UsingCast               UsingConvertFrom_ISO8601
----------------------- ----------------------- ------------------------
2006-04-25T15:50:59.997 2006-04-25 15:50:59.997 2006-04-25 15:50:59.997

H. İkili ve karakter verileriyle CONVERT kullanma

Bu örnekler, farklı stiller kullanarak ikili ve karakter verisi dönüştürmenin sonuçlarını gösterir.

--Convert the binary value 0x4E616d65 to a character value.
SELECT CONVERT (CHAR (8), 0x4E616d65, 0) AS [Style 0, binary to character];

Sonuç kümesi aşağıdadır.

Style 0, binary to character
----------------------------
Name

Bu örnek, Stil'in 1 sonuç kesintisini zorunlu kılabildiğini gösteriyor. Sonuç setindeki karakterler 0x kesintiye zorlar.

SELECT CONVERT (CHAR (8), 0x4E616d65, 1) AS [Style 1, binary to character];

Sonuç kümesi aşağıdadır.

Style 1, binary to character
------------------------------
0x4E616D

Bu örnek, Style'ın 2 sonucu kısaltmadığını gösteriyor, çünkü sonuç karakterleri 0xiçermiyor.

SELECT CONVERT (CHAR (8), 0x4E616d65, 2) AS [Style 2, binary to character];

Sonuç kümesi aşağıdadır.

Style 2, binary to character
------------------------------
4E616D65

Karakter değerini Name ikili bir değere dönüştürün.

SELECT CONVERT (BINARY (8), 'Name', 0) AS [Style 0, character to binary];

Sonuç kümesi aşağıdadır.

Style 0, character to binary
----------------------------
0x4E616D6500000000
SELECT CONVERT (BINARY (4), '0x4E616D65', 1) AS [Style 1, character to binary];

Sonuç kümesi aşağıdadır.

Style 1, character to binary
----------------------------
0x4E616D65
SELECT CONVERT (BINARY (4), '4E616D65', 2) AS [Style 2, character to binary];

Sonuç kümesi aşağıdadır.

Style 2, character to binary
----------------------------------
0x4E616D65

Ben. Tarih ve saat veri türlerini dönüştürme

Bu örnekte tarih, saat ve tarih saat veri türlerinin dönüştürülmesi gösterilmektedir.

DECLARE @d1 AS DATE,
        @t1 AS TIME,
        @dt1 AS DATETIME;

SET @d1 = GETDATE();
SET @t1 = GETDATE();
SET @dt1 = GETDATE();
SET @d1 = GETDATE();

-- When converting date to datetime the minutes portion becomes zero.
SELECT @d1 AS DATE,
       CAST (@d1 AS DATETIME) AS [date as datetime];

-- When converting time to datetime the date portion becomes zero
-- which converts to January 1, 1900.
SELECT @t1 AS TIME,
       CAST (@t1 AS DATETIME) AS [time as datetime];

-- When converting datetime to date or time non-applicable portion is dropped.
SELECT @dt1 AS DATETIME,
       CAST (@dt1 AS DATE) AS [datetime as date],
       CAST (@dt1 AS TIME) AS [datetime as time];

Datetime veya datetime2 dönüştürmesini göz önünde bulundurarak değerlerin uyumlu bir aralık içinde olduğundan emin olun. Datetime için en düşük yıl değeri olurken1753, en düşük yıl değeri 0001date ve datetime2 içindir.

DECLARE @d1 AS DATE,
        @dt1 AS DATETIME,
        @dt2 AS DATETIME2;

SET @d1 = '1492-08-03';
--This is okay; Minimum YYYY for DATE is 0001

SET @dt2 = CAST (@d1 AS DATETIME2);
--This is okay; Minimum YYYY for DATETIME2 IS 0001

SET @dt1 = CAST (@d1 AS DATETIME);
--This returns an error with (Msg 242) "The conversion of a date data type to a datetime data type resulted in an out-of-range value."
--Minimum YYYY for DATETIME is 1753

J. FARKLı biçimlerde tarih saat verileriyle CONVERT kullanma

Değerlerden GETDATE() başlayarak, bu örnekte CONVERT bu makalenin Tarih ve Saat stilleri bölümündeki tüm tarih ve saat stilleri görüntülenir.

Biçim # Örnek sorgu Örnek sonuç
0 SELECT CONVERT(NVARCHAR, GETDATE(), 0) 23 Ağustos 2019 13:39
1 SELECT CONVERT(NVARCHAR, GETDATE(), 1) 08/23/19
2 SELECT CONVERT(NVARCHAR, GETDATE(), 2) 19.08.23
3 SELECT CONVERT(NVARCHAR, GETDATE(), 3) 23/08/19
4 SELECT CONVERT(NVARCHAR, GETDATE(), 4) 23.08.19
5 SELECT CONVERT(NVARCHAR, GETDATE(), 5) 23-08-19
6 SELECT CONVERT(NVARCHAR, GETDATE(), 6) 23 Ağustos 19
7 SELECT CONVERT(NVARCHAR, GETDATE(), 7) 23 Ağustos 19
8 veya 24 veya 108 SELECT CONVERT(NVARCHAR, GETDATE(), 8) 13:39:17
9 veya 109 SELECT CONVERT(NVARCHAR, GETDATE(), 9) 23 Ağustos 2019 1:39:17:090
10 SELECT CONVERT(NVARCHAR, GETDATE(), 10) 08-23-19
11 SELECT CONVERT(NVARCHAR, GETDATE(), 11) 19/08/23
12 SELECT CONVERT(NVARCHAR, GETDATE(), 12) 190823
13 veya 113 SELECT CONVERT(NVARCHAR, GETDATE(), 13) 23 Ağustos 2019 13:39:17:090
14 veya 114 SELECT CONVERT(NVARCHAR, GETDATE(), 14) 13:39:17:090
20 veya 120 SELECT CONVERT(NVARCHAR, GETDATE(), 20) 2019-08-23 13:39:17
21 veya 25 veya 121 SELECT CONVERT(NVARCHAR, GETDATE(), 21) 2019-08-23 13:39:17.090
22 SELECT CONVERT(NVARCHAR, GETDATE(), 22) 23.08.19 13:39:17
23 SELECT CONVERT(NVARCHAR, GETDATE(), 23) 2019-08-23
101 SELECT CONVERT(NVARCHAR, GETDATE(), 101) 08/23/2019
102 SELECT CONVERT(NVARCHAR, GETDATE(), 102) 2019.08.23
103 SELECT CONVERT(NVARCHAR, GETDATE(), 103) 23/08/2019
104 SELECT CONVERT(NVARCHAR, GETDATE(), 104) 23.08.2019
105 SELECT CONVERT(NVARCHAR, GETDATE(), 105) 23-08-2019
106 SELECT CONVERT(NVARCHAR, GETDATE(), 106) 23 Ağustos 2019
107 SELECT CONVERT(NVARCHAR, GETDATE(), 107) 23 Ağustos 2019, Ağustos 2019
110 SELECT CONVERT(NVARCHAR, GETDATE(), 110) 08-23-2019
111 SELECT CONVERT(NVARCHAR, GETDATE(), 111) 2019/08/23
112 SELECT CONVERT(NVARCHAR, GETDATE(), 112) 20190823
113 SELECT CONVERT(NVARCHAR, GETDATE(), 113) 23 Ağustos 2019 13:39:17.090
120 SELECT CONVERT(NVARCHAR, GETDATE(), 120) 2019-08-23 13:39:17
121 SELECT CONVERT(NVARCHAR, GETDATE(), 121) 2019-08-23 13:39:17.090
126 SELECT CONVERT(NVARCHAR, GETDATE(), 126) 2019-08-23T13:39:17.090
127 SELECT CONVERT(NVARCHAR, GETDATE(), 127) 2019-08-23T13:39:17.090
130 SELECT CONVERT(NVARCHAR, GETDATE(), 130) 22 ذو الحجة 1440 1:39:17.090P
131 SELECT CONVERT(NVARCHAR, GETDATE(), 131) 12.22.1440 1:39:17.090

K. İzin verilen dönüştürmelerde veri türü önceliği etkileri

Aşağıdaki örnek varchar(10) türünde bir değişken tanımlar, değişkene bir tamsayı değeri atar ve ardından değişkeni bir dizeyle birleştirmeyi seçer.

DECLARE @string AS VARCHAR (10);
SET @string = 1;

SELECT @string + ' is a string.' AS Result;

Sonuç kümesi aşağıdadır.

Result
-----------------------
1 is a string.

1 int değeri varchar'a dönüştürüldü.

Bu örnekte, bunun yerine int değişkeni kullanan benzer bir sorgu gösterilmektedir:

DECLARE @notastring AS INT;
SET @notastring = '1';

SELECT @notastring + ' is not a string.' AS Result;

Bu durumda, SELECT deyimi aşağıdaki hatayı atar:

Msg 245, Level 16, State 1, Line 3
Conversion failed when converting the varchar value ' is not a string.' to data type int.

İfadeyi @notastring + ' is not a string.'değerlendirmek için Database Engine'in veri tipi önceliği kurallarına uyması gerekir ve böylece ifade sonucu hesaplanamadan önce örtük dönüşümü tamamlamalıdır. Int, varchar'dan daha yüksek önceliğe sahip olduğundan, Database Engine diziyi tam sayıya dönüştürmeye çalışır ve başarısız olur çünkü bu dizi tam sayıya dönüştürülemez.

Dönüştürülebilecek bir dizem sağlarsak, ime başarılı olur, aşağıdaki örnekte görüldüğü gibi:

DECLARE @notastring AS INT;
SET @notastring = '1';

SELECT @notastring + '1';

Bu durumda, dize '1' tamsayı değerine 1dönüştürülebilir, bu nedenle bu SELECT deyim değerini 2döndürür. Verilen veri türleri tam sayı olduğunda, + operatör bir dizi birleştirmesi yerine toplama matematiksel operatörü olur.

Örnekler: Azure Synapse Analytics

L. CAST ve CONVERT kullanma

Bu örnek, liste fiyatının ilk bassamında bulunan 3 ürünler için ürünün adını alır ve bu ürünlerin adını ListPrice dönüştürür. Veritabanını kullanırAdventureWorksDW2025.

SELECT EnglishProductName AS ProductName,
       ListPrice
FROM dbo.DimProduct
WHERE CAST (ListPrice AS INT) LIKE '3%';

Bu örnek, yerine CONVERTkullanarak CAST aynı sorguyu gösterir. Veritabanını kullanır AdventureWorksDW2025 .

SELECT EnglishProductName AS ProductName,
       ListPrice
FROM dbo.DimProduct
WHERE CONVERT (INT, ListPrice) LIKE '3%';

M. Aritmetik işleçlerle CAST kullanma

Bu örnek, ürün birim fiyatını () indirim yüzdesineUnitPrice (UnitPriceDiscountPct) bölerek tek bir sütun değeri hesaplar. Bu sonuç daha sonra en yakın tamsayıya yuvarlanıp son olarak int veri türüne dönüştürülür. Bu örnekte veritabanı kullanılır AdventureWorksDW2025 .

SELECT ProductKey,
       UnitPrice,
       UnitPriceDiscountPct,
       CAST (ROUND(UnitPrice * UnitPriceDiscountPct, 0) AS INT) AS DiscountPrice
FROM dbo.FactResellerSales
WHERE SalesOrderNumber = 'SO47355'
      AND UnitPriceDiscountPct > .02;

Sonuç kümesi aşağıdadır.

ProductKey  UnitPrice  UnitPriceDiscountPct  DiscountPrice
----------  ---------  --------------------  -------------
323         430.6445   0.05                  22
213         18.5043    0.05                  1
456         37.4950    0.10                  4
456         37.4950    0.10                  4
216         18.5043    0.05                  1

N. LIKE yan tümcesiyle CAST kullanma

Bu örnek, para sütununu ListPriceint türüne, ardından char(20) tipine dönüştürür, böylece cümle LIKE bunu kullanabilir. Bu örnekte veritabanı kullanılır AdventureWorksDW2025 .

SELECT EnglishProductName AS Name,
       ListPrice
FROM dbo.DimProduct
WHERE CAST (CAST (ListPrice AS INT) AS CHAR (20)) LIKE '2%';

O. TARIH saat verileriyle CAST ve CONVERT kullanma

Bu örnekte geçerli tarih ve saat görüntülenir, geçerli tarih ve saati karakter veri türüyle değiştirmek için kullanılır CASTCONVERT ve son olarak tarih ve saati ISO 8601 biçiminde görüntüler. Bu örnekte veritabanı kullanılır AdventureWorksDW2025 .

SELECT TOP (1) SYSDATETIME() AS UnconvertedDateTime,
               CAST (SYSDATETIME() AS NVARCHAR (30)) AS UsingCast,
               CONVERT (NVARCHAR (30), SYSDATETIME(), 126) AS UsingConvertTo_ISO8601
FROM dbo.DimCustomer;

Sonuç kümesi aşağıdadır.

UnconvertedDateTime     UsingCast                     UsingConvertTo_ISO8601
---------------------   ---------------------------   ---------------------------
07/20/2010 1:44:31 PM   2010-07-20 13:44:31.5879025   2010-07-20T13:44:31.5879025

Bu örnek, önceki örneğin kabaca tersidir. Bu örnekte bir tarih ve saat karakter verileri olarak görüntülenir, karakter verilerini CAST veri türüne dönüştürmek için kullanılır ve ardından karakter verilerini CONVERT veri türüne değiştirmek için kullanılır. Bu örnekte veritabanı kullanılır AdventureWorksDW2025 .

SELECT TOP (1) '2010-07-25T13:50:38.544' AS UnconvertedText,
               CAST ('2010-07-25T13:50:38.544' AS DATETIME) AS UsingCast,
               CONVERT (DATETIME, '2010-07-25T13:50:38.544', 126) AS UsingConvertFrom_ISO8601
FROM dbo.DimCustomer;

Sonuç kümesi aşağıdadır.

UnconvertedText         UsingCast               UsingConvertFrom_ISO8601
----------------------- ----------------------- ------------------------
2010-07-25T13:50:38.544 07/25/2010 1:50:38 PM   07/25/2010 1:50:38 PM