SQL Server Varchar军事日期格式YYYY-MM-DD

时间:2019-06-26 18:09:12

标签: sql sql-server tsql

我正在使用SQL Server,并且在我的数据库中,我有一个日期列为varchar的日期列,并且具有类似04042011的数据。我正在尝试编写一个用于另一个程序的查询,它正在请求一种军事格式的格式,例如YYYY-MM-DD。对于HireDateSeparationDate,有什么方法可以即时执行吗?

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。但是我对此无能为力,只是想尽我所能。

2 个答案:

答案 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)