转换字符串' 01011900'或' 19990101'或任何格式的日期和所需的格式' 01/01/1990'

时间:2015-07-09 05:14:15

标签: sql sql-server

我尝试过以下示例

SELECT
    FORMAT(CONVERT(DATETIME,'01011900'), 'dd/MM/yyyy') 
FROM
    identities 
WHERE
    id_type = 'VID'

3 个答案:

答案 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将使用/.-,具体取决于服务器的文化。