我正在使用SQL Server,并且在我的数据库中,我有一个日期列为varchar
的日期列,并且具有类似04042011
的数据。我正在尝试编写一个用于另一个程序的查询,它正在请求一种军事格式的格式,例如YYYY-MM-DD
。对于HireDate
和SeparationDate
,有什么方法可以即时执行吗?
SELECT [EmployeeTC_No] AS "Employee TC #"
,[pye_nlast] AS "Name Last"
,[pye_nfirst] AS "Name First"
,[Dept] AS "Department"
,CASE WHEN [pye_status] = 'A' THEN 1
WHEN [pye_status] = 'T' THEN 0
ELSE NULL END AS "Active"
,[HireDate] AS "Hire Date"
,[SeparationDate] AS "Separation Date"
FROM [OnBaseWorking].[dbo].[Employees]
WHERE EmployeeTC_No != 'Not Assigned'
AND LOWER(EmployeeTC_No) = LOWER('@primary')
任何帮助将不胜感激。我只有阅读权。因此,我希望可以即时执行此操作,因为我知道日期不应为数据类型varchar
,而应为数据类型date。但是我对此无能为力,只是想尽我所能。
答案 0 :(得分:2)
如果是8个字符。如果您有一些虚假数据,我会强调使用try_convert()。
Select try_convert(date,right(HierDate,4)+left(HierDate,4))
From YourTable
陷阱空值。这将返回NULL而不是1900-01-01
Select try_convert(date,nullif(HierDate,'')+left(HierDate,4))
From YourTable
答案 1 :(得分:1)
连接所需的substrings中的字符串。
SUBSTRING(YourField, {The position that the year starts}, 4)
+'-'+
SUBSTRING(YourField, {The position that the month starts}, 2)
+'-'+
SUBSTRING(YourField, {The position that the day starts}, 2)