簡體   English   中英

SQL Server 將 Varchar 轉換為日期時間

[英]SQL Server Convert Varchar to Datetime

我有這個日期格式:2011-09-28 18:01:00(在 varchar 中),我想將它轉換為日期時間更改為這種格式 28-09-2011 18:01:00。 我該怎么做?

SELECT CONVERT(Datetime, '2011-09-28 18:01:00', 120) -- to convert it to Datetime

SELECT CONVERT( VARCHAR(30), @date ,105) -- italian format [28-09-2011 18:01:00]
+ ' ' + SELECT CONVERT( VARCHAR(30), @date ,108 ) -- full date [with time/minutes/sec]

像這樣

DECLARE @date DATETIME
SET @date = '2011-09-28 18:01:00'
select convert(varchar, @date,105) + ' ' + convert(varchar, @date,108)

這個網站顯示了幾個格式選項。

例子:

SELECT CONVERT(VARCHAR(10), GETDATE(), 105) 

您可以將所有不同的樣式datetime conversiondatetime conversion

https://www.w3schools.com/sql/func_sqlserver_convert.asp

這具有值范圍:-

CONVERT(data_type(length),expression,style)

對於樣式值,
選擇你需要的任何人,就像我需要 106 一樣。

你可以這樣做,但它把它作為一個varchar

declare @s varchar(50)

set @s = '2011-09-28 18:01:00'

select convert(varchar, cast(@s as datetime), 105) + RIGHT(@s, 9)

要么

select convert(varchar(20), @s, 105)

如前所述,日期時間沒有格式/字符串表示格式。

您可以使用某種格式更改字符串輸出。

要將字符串轉換為日期時間:

declare @date nvarchar(25) 
set @date = '2011-09-28 18:01:00' 

-- To datetime datatype
SELECT CONVERT(datetime, @date)

給出:

-----------------------
2011-09-28 18:01:00.000

(1 row(s) affected)

要將其轉換為您想要的字符串:

-- To VARCHAR of your desired format
SELECT CONVERT(VARCHAR(10), CONVERT(datetime, @date), 105) +' '+ CONVERT(VARCHAR(8), CONVERT(datetime, @date), 108)

給出:

-------------------
28-09-2011 18:01:00

(1 row(s) affected)
SELECT CONVERT(VARCHAR(10), GETDATE(), 105) + ' ' + CONVERT(VARCHAR(10), GETDATE(), 108)

試試下面的

select Convert(Varchar(50),yourcolumn,103) as Converted_Date from yourtbl

該網站提供了一些很好的示例,可以將任何varchar轉換為日期或日期時間

我厭倦了所有不同的轉換谷歌搜索,最終得到了這個在新變化上擴展的實用功能。

CREATE FUNCTION [dbo].[ParseDatetime] (
    @INPUT nvarchar(255),
    @FORMAT nvarchar(255)
)
RETURNS datetime

AS 
BEGIN 


DECLARE @TimePart NVARCHAR(255)
DECLARE @DatePart NVARCHAR(255)
DECLARE @DayPart NVARCHAR(255)
DECLARE @ExDayPart NVARCHAR(255)
DECLARE @MonthPart NVARCHAR(255)
DECLARE @YearPart NVARCHAR(255)
DECLARE @Date DATETIME
--DECLARE @INPUTSTRING NVARCHAR(255)
--SET @INPUTSTRING = '20-10-2019 00:00:00'

--SET @FORMAT = 'D-M-YYYY HH:MM:SS'
IF(@FORMAT = 'D-M-YYYY HH:MM:SS')
BEGIN
    SET @TimePart = RIGHT(@INPUT,LEN(@INPUT)-CHARINDEX(' ',@INPUT))
    SET @DatePart = LEFT(@INPUT,CHARINDEX(' ',@INPUT))
    SET @DayPart = LEFT(@DatePart,charindex('-',@DatePart)-1)
    SET @ExDayPart = RIGHT(@DatePart,LEN(@DatePart)-charindex('-',@DatePart)+1)
    SET @MonthPart = left(@ExDayPart ,charindex('-',@ExDayPart )-1)
    SET @YearPart = right(@ExDayPart ,LEN(@ExDayPart )-charindex('-',@ExDayPart )+1)
    SET @Date = DATEFROMPARTS(@YearPart,@MonthPart,@DayPart) 

END

IF(@FORMAT = 'YYYY-MM-DD')
BEGIN
    SET @DayPart = RIGHT(@INPUT,2)
    SET @MonthPart = RIGHT(left(@INPUT,7),2)
    SET @YearPart = LEFT(@INPUT,4)
    SET @Date = DATEFROMPARTS(@YearPart,@MonthPart,@DayPart) 

END

IF(@FORMAT = 'EXCEL_DAYS_SINCE_1900')
BEGIN
--DECLARE @INPUT NVARCHAR(255)
--SET @INPUT = ' 43554' 
    SET @Date = Dateadd(day,CAST(@INPUT AS INT),datefromparts(1900,1,1))
END


RETURN @Date
END
GO

將其用作:

SELECT
[DateAsDate] = dbo.[ParseDateTime]([DateAsString], 'YYYY-MM-DD')
FROM [tablename]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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