2016-09-23 41 views
0

我有一個應用程序以「Thu Sep 22 2016」的格式返回日期,我想查詢已存儲日期爲 的sql服務器數據庫,格式爲「2016-09- 06" 。 SQL服務器是否提供任何內置的轉換功能(特別是3個字母的月份名稱到數字)? 請讓我知道。SQL服務器在查詢前執行日期轉換

+0

http://www.w3schools.com/sql/func_convert.asp - 可能有用嗎? –

+2

在您的應用程序棧中,調用時總是儘可能早地將字符串表示轉換爲DateTime實例。調用時總是儘可能晚地轉換回字符串。理想情況下,兩種轉換都發生在表示層中。基於這種最佳做法,日期時間應該作爲實際日期時間存儲,您的應用程序應該已將您的字符串值轉換爲日期時間,這使得創建查詢變得簡單,因爲您正在比較類型。 – Igor

+0

感謝您的意見。但不幸的是,我無法控制該應用程序返回日期 - 它基本上是通過執行zfs命令獲得的日期輸出。它由文件系統返回 – user2306856

回答

0

SQL Server具有有限的日期轉換支持。這些在documentation中描述。

我想這你想要做什麼:

select convert(date, substring(col, 5, 6) + ',' + right(col, 5), 107) 

的想法是你的字符串轉換爲「2016年9月22日」,然後用這個轉換。假設您的國際化格式設置爲英文,那麼這種方法應該可行。

0

您可以使用FORMAT

例子:

DECLARE @d DATETIME = '10/01/2011'; 
SELECT FORMAT (@d, 'd', 'en-US') AS 'US English Result' 
     ,FORMAT (@d, 'd', 'en-gb') AS 'Great Britain English Result' 
     ,FORMAT (@d, 'd', 'de-de') AS 'German Result' 
     ,FORMAT (@d, 'd', 'zh-cn') AS 'Simplified Chinese (PRC) Result'; 

SELECT FORMAT (@d, 'D', 'en-US') AS 'US English Result' 
     ,FORMAT (@d, 'D', 'en-gb') AS 'Great Britain English Result' 
     ,FORMAT (@d, 'D', 'de-de') AS 'German Result' 
     ,FORMAT (@d, 'D', 'zh-cn') AS 'Chinese (Simplified PRC) Result'; 
0

試試這個:

SELECT STR_TO_DATE('Sep 22, 2016','%M %d,%Y'); 
+0

獲取錯誤「STR_TO_DATE」不是公認的內置函數名稱。 「 – user2306856

+0

你正在使用哪個版本的mysql? –

+1

@TK問題說:「* ** SQL服務器**是否提供任何內置函數進行轉換*」 –

0

你要做的唯一一件事情就是刪除您的字符串的一週部分的一天日期格式。一旦刪除了該字符串,它就是SQL Server的標準日期格式。

Declare @yourTable table (
    Id int identity(1,1), 
    YourDate datetime2 
) 

Insert into @yourTable values 
('2016-09-22'), 
('2016-09-16'), 
('2016-09-22') 

Declare @appDate varchar(100) = 'Thu Sep 22 2016' 
Set @appDate = ltrim(substring(@appDate,4,len(@appDate)-3)) 
select * from @yourTable where cast(YourDate as date) = @appDate 

我還將表中的日期時間轉換爲日期以避免在查詢時使用日期時間的時間組件。

+0

謝謝..這有幫助! – user2306856