我有一個生日爲'7/08/1986'或'07/08/1986'的字段。轉換日期字段格式
我想將值轉換爲'1986/08/07'。簡單地從DD/MM/YYYY到YYYY/MM/DD。請注意這一切都在SQL Server 2005中。
此外,如果日期是單數字意味着輸出shd仍然顯示爲兩位數,如'07'而不是'7'。
我該如何做這種轉換?
您的善意答覆將幫助我。我提前感謝。
我有一個生日爲'7/08/1986'或'07/08/1986'的字段。轉換日期字段格式
我想將值轉換爲'1986/08/07'。簡單地從DD/MM/YYYY到YYYY/MM/DD。請注意這一切都在SQL Server 2005中。
此外,如果日期是單數字意味着輸出shd仍然顯示爲兩位數,如'07'而不是'7'。
我該如何做這種轉換?
您的善意答覆將幫助我。我提前感謝。
您可以將輸入的生日轉換爲日期時間字段,然後立即再次將其轉換爲varchar。試試這個:
select convert(varchar(10), convert(datetime, '7/8/1986'), 111)
輸出應該是'1986/07/08',一個varchar。
CONVERT(nvarchar(30), GETDATE(), 111)
中你會看到YYYY/MM/DD
先不要儲存這些日期爲字符串,使用datetime (Transact-SQL)或smalldatetime (Transact-SQL)數據類型(SQL Server 2008中具有唯一日期的date (Transact-SQL)),那麼你就可以很容易地格式它使用內置工具CONVERT (Transact-SQL)。
通過將日期存儲爲字符串,您可以輕鬆地獲取'2/29/2010'或'13/13/2010'等無效日期。還需要10個字節來將'mm/dd/yyyy'存儲在一個字符串中,而需要8個字節來存儲日期時間,並且只需要4個字節來存儲小日期時間值。當你存儲字符串日期時,你最終會遇到難以處理值的問題(比如這個問題中的問題)。如果你使用datetime或smalldatetime你的代碼會是這樣的:
DECLARE @YourTable table (YourDate datetime)
INSERT @YourTable VALUES ('12/1/2010 13:45')
INSERT @YourTable VALUES ('20101201 8:00am')
INSERT @YourTable VALUES ('2010-12-01')
SELECT
CONVERT(char(10),YourDate,111) AS DateOnly
,CONVERT(char(23),YourDate,121) AS FullDateTime
,CONVERT(char(12),YourDate,107) AS MonthNameOf
,CONVERT(char(12),YourDate,114) AS TimeOnly
--there are many more output display formats
FROM @YourTable
OUTPUT:
DateOnly FullDateTime MonthNameOf TimeOnly
---------- ----------------------- ------------ ------------
2010/12/01 2010-12-01 13:45:00.000 Dec 01, 2010 13:45:00:000
2010/12/01 2010-12-01 08:00:00.000 Dec 01, 2010 08:00:00:000
2010/12/01 2010-12-01 00:00:00.000 Dec 01, 2010 00:00:00:000
(3 row(s) affected)
要解決現有的字符串列按照這個例子:
設置您現有的表(OP不需要這樣做,因爲這個表已經存在):
CREATE TABLE HasBadStringDates (DateOf varchar(10) null)
INSERT HasBadStringDates VALUES ('1986/08/07')
INSERT HasBadStringDates VALUES ('7/08/1986')
INSERT HasBadStringDates VALUES ('07/08/1986')
select * from HasBadStringDates
OUTPUT :
DateOf
----------
1986/08/07
7/08/1986
07/08/1986
(3 row(s) affected)
解決您現有的表:
ALTER TABLE HasBadStringDates
ALTER COLUMN DateOf datetime NULL
GO
select CONVERT(char(10),DateOf,111) AS DateOnly from HasBadStringDates
OUTPUT:
DateOnly
----------
1986/08/07
1986/07/08
1986/07/08
(3 row(s) affected)
+1了很好的描述。 – hims056 2012-08-21 09:01:06