簡體   English   中英

SQL Server:將varchar字段轉換為日期

[英]SQL Server : converting varchar field to date

我的表中有一個varchar列,其中包含日期格式為dd-MM-yyyy的一堆日期

31-12-2018
01-01-2019
02-01-2019

我需要編寫一個基於日期的查詢,以獲取2019年1月1日之前的所有日期。 我嘗試過同時使用CASTCONVERT來轉換這些表值,但不走運。

使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM