Bir Dizeyi T-SQL'de Tarihe nasıl dönüştürebilirim?
Benim test durumum şu dizedir: '24.04.2012'
Bir Dizeyi T-SQL'de Tarihe nasıl dönüştürebilirim?
Benim test durumum şu dizedir: '24.04.2012'
Yanıtlar:
CONVERT(datetime, '24.04.2012', 104)
Hile yapmalı. Daha fazla bilgi için buraya bakın: CAST ve CONVERT (Transact-SQL)
CONVERT(DateTime, DateField, 104)
Veritabanının MS SQL Server 2012 veya üzeri olduğunu varsayarsak, işte çalışan bir çözüm. Temel ifade, satır içi deneme ayrıştırmasını içerir:
SELECT TRY_PARSE('02/04/2016 10:52:00' AS datetime USING 'en-US') AS Result;
Üretim sürümünde uyguladıklarımız:
UPDATE dbo.StagingInputReview
SET ReviewedOn =
ISNULL(TRY_PARSE(RTrim(LTrim(ReviewedOnText)) AS datetime USING 'en-US'), getdate()),
ModifiedOn = (getdate()), ModifiedBy = (suser_sname())
-- Check for empty/null/'NULL' text
WHERE not ReviewedOnText is null
AND RTrim(LTrim(ReviewedOnText))<>''
AND Replace(RTrim(LTrim(ReviewedOnText)),'''','') <> 'NULL';
ModifiedOn ve ModifiedBy sütunları, yalnızca dahili veritabanı izleme amaçları içindir.
Ayrıca şu Microsoft MSDN referanslarına bakın:
CONVERT şeyi işe yarasa da, aslında onu kullanmamalısınız. Neden SQL-Server'da dize değerlerini ayrıştırdığınızı kendinize sormalısınız. Bu, bazı verileri manuel olarak düzelttiğiniz tek seferlik bir işse, bu verileri başka bir zaman alamazsınız, sorun değil, ancak herhangi bir uygulama bunu kullanıyorsa, bir şeyi değiştirmelisiniz. En iyi yol, "tarih" veri türünü kullanmaktır. Bu kullanıcı girdisi ise, bu daha da kötüdür. O zaman önce istemcide bazı kontroller yapmalısınız. SQL-Server'ın bir tarih beklediği dize değerlerini gerçekten geçirmek istiyorsanız, her zaman ISO biçimini ('YYYYAAGG') kullanabilirsiniz ve otomatik olarak dönüştürmesi gerekir.
Kullanabilirsiniz:
SELECT CONVERT(datetime, '24.04.2012', 103) AS Date
Referans: CAST ve CONVERT (Transact-SQL)
CONVERT(DateTime, ExpireDate, 121) AS ExpireDate
gerekeni yapacak, sonuç:
2012-04-24 00:00:00.000