我尝试过以下示例
SELECT
FORMAT(CONVERT(DATETIME,'01011900'), 'dd/MM/yyyy')
FROM
identities
WHERE
id_type = 'VID'
答案 0 :(得分:0)
您的数据应该是19000101.所以您的输入需要先修改,然后我们需要使用转换来获取适当的格式。
declare @inp varchar(10) = '01011900'
select CONVERT(varchar, cast(right(@inp,4)+''+left(@inp,4) as datetime), 101)
--Output : 01/01/1900
答案 1 :(得分:0)
试试这个:
SELECT FORMAT(CONVERT(DATETIME,STUFF(STUFF('01011900',5,0,'/'),3,0,'/')),'dd/MM/yyyy')
使用 /
插入STUFF
,然后将其转换。
STUFF(STUFF('01011900',5,0,'/'),3,0,'/') -- 01/01/1900
的更新强>:
我也尝试了以下内容,
DECLARE @DateString varchar(10) = '12202012' --19991231 --25122000
DECLARE @DateFormat varchar(10)
DECLARE @Date datetime
BEGIN TRY
SET @Date = CAST(@DateString AS DATETIME)
SET @DateFormat = 'Valid'
END TRY
BEGIN CATCH
BEGIN TRY
SET @DateFormat = 'ddMMyyyy'
SET @Date = CONVERT(DATETIME,STUFF(STUFF(@DateString,5,0,'/'),3,0,'/'))
END TRY
BEGIN CATCH
SET @DateFormat = 'MMddyyyy'
SET @Date = CONVERT(DATETIME,STUFF(STUFF(@DateString,1,2,''),3,0,
'/' + LEFT(@DateString,2) + '/'))
END CATCH
END CATCH
SELECT
@DateString InputDate,
@DateFormat InputDateFormat,
@Date OutputDate
答案 2 :(得分:0)
现在你的问题很荒谬。不能存在可以处理所有日期格式的通用格式,您需要将这些信息提供给您的查询(在这种情况下,您可以更好地使用存储过程),您也可以传递日期格式字符串。您可以在SELECT CASE中执行类似的操作
如果格式为 ddmmyyyy ,请执行JesuRaja建议的内容。但它的already answered in SO
SELECT CONVERT (datetime, Stuff(Stuff('311012',5,0,'.'),3,0,'.'), 4)
如果 mmddyyyy ,see this answer
DECLARE @Date char(8)
SET @Date='12312009'
SELECT CONVERT(datetime,RIGHT(@Date,4)+LEFT(@Date,2)+SUBSTRING(@Date,3,2))
如果 yyyymmdd ,只需做一个CAST
SELECT CAST('20041223' AS datetime)
<小时/> 底线是,您必须指定日期格式。例如,考虑字符串
20122012
。你能猜出日期格式吗?
此外,您无法强制服务器使用/
作为分隔符。 SQL Server将使用/
,.
或-
,具体取决于服务器的文化。