[英]SQL Server : converting varchar field to date
我的表中有一個varchar
列,其中包含日期格式為dd-MM-yyyy的一堆日期
31-12-2018
01-01-2019
02-01-2019
我需要編寫一個基於日期的查詢,以獲取2019年1月1日之前的所有日期。 我嘗試過同時使用CAST
和CONVERT
來轉換這些表值,但不走運。
使用CAST
,我的代碼如下:
SELECT
CAST('''' + SUBSTRING(arc_billed_to_date, 4, 2) + '-' + SUBSTRING(arc_billed_to_date, 1, 2) + SUBSTRING(arc_billed_to_date, 6, 5)+ '''' AS date),
CAST('''' + SUBSTRING(arc_billed_to_date, 7, 5) + '-' + SUBSTRING(arc_billed_to_date, 1, 2) + '-' + SUBSTRING(arc_billed_to_date, 4, 2) + '''' AS date),
CAST('''' + SUBSTRING(arc_billed_to_date, 7, 5) + '-' + SUBSTRING(arc_billed_to_date, 4, 2) + '-' + SUBSTRING(arc_billed_to_date, 1, 2) + '''' AS DATE),
CONVERT(DATE, '12-31-2018') AS x
FROM
wkpol
使用轉換
select Convert(datetime,'''' + SUBSTRING(arc_billed_to_date,7,5) + '-' + SUBSTRING(arc_billed_to_date,4,2) + '-' + SUBSTRING(arc_billed_to_date,1,2)+ '''',105) as x from wkpol
我得到的錯誤是
從字符串轉換日期和/或時間時轉換失敗。
任何幫助表示贊賞。
好吧,您將因為使用varchar字段作為日期而受到指責。 無論如何,假設這是另一個線程的問題,您可以執行如下轉換:
select * from myTable
where cast(right(arc_billed_to_date,4) +
substring(arc_billed_to_date,4,2) +
left(arc_billed_to_date,2) as date) < '20190101';
您也不會使用任何索引。
除了Sean的注釋,您還可以將DateFormat
設置為DMY。
例
Declare @YourTable table (SomeCol varchar(50))
Insert Into @YourTable values
('31-12-2018')
,('01-01-2019')
,('02-01-2019')
Set DateFormat DMY
Select AsDate = try_convert(date,SomeCol)
From @YourTable
退貨
AsDate
2018-12-31
2019-01-01
2019-01-02
SELECT *
FROM wkpol
WHERE convert(date, arc_billed_to_date, 103) < convert(date, '01/01/2019');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.