2017-01-16 161 views
0

我在我的SQL Server數據庫表中具有格式化日期時間值。SQL日期時間格式更改

2017-02-01 14:31:53.000 
2017-09-01 14:54:11.000 

我想交換就像

2017-01-02 14:31:53.000 
2017-01-09 14:54:11.000 

每月&日期值有什麼辦法實現呢? 有多種格式的記錄。

我嘗試使用Excel來轉換相同並創建查詢。但它不起作用。

+1

最好讓sql server處理存儲部分。您需要將來自db的日期時間轉換爲您想要的任何格式。 –

+0

實際上,以前的應用程序之前在SQL中輸入數據時出現了一些錯誤。它交換了月份和日期的地方。現在我要糾正它...您看到的日期是2017年1月2日和9日。 – Vijay

+0

日期時間存儲不帶顯示格式。如果您將DateTime值存儲在varchar列中,則應將其更改爲DateTime列。 –

回答

0

正如我在我的評論中寫的,DateTime are stored without display format
如果你想在一個特定的格式選擇的日期,你需要爲使用Format()CONVERT()(2012年或更高版本)(僅支持預定義的格式)

現在,假設你想要的格式爲yyyy-mm-dd hh:mi:ss,你可以使用具有120風格轉換:

SELECT CONVERT(char(19), DateTimeColumn, 120) As FormattedDateTime 
FROM TableName 
0
/* 
@formatString(varchar) 
- the format string to use (Examples "dd mm yyyy", "mmm.dd.yy") 
Description: 

Formats a given date based on the format specified in @formatString 
d - one digit day (when applicable) 
dd- two digit day 
ddd- short day name 
dddd- long day name 
m- one digit month (when applicable) 
mm- two digit month 
mmm- short month name 
mmmm- long month name 
yy- two digit year 
yyyy- four digit year 
*/ 
create function dbo.fnFormatDate 
(
@inputDate datetime, 
@formatString varchar(25) 
) 
returns varchar(20) as 
begin 
declare @returnValue varchar(25) 

-- Declare local vairables 
declare @formattedDate varchar(25), 
@day varchar(20), @month varchar(20), @year varchar(20), 
@dayFormat varchar(5), @monthFormat varchar(5), @yearFormat varchar(5) 

set @dayFormat = '' 
set @monthFormat = '' 
set @yearFormat = '' 

-- Convert the supplied date to day mon year (25 Jan 2008) 
set @formattedDate = convert(varchar, @inputDate, 106) 

-- If the format string contains a format for the day 
if charindex('d', @formatString) > 0 
-- Get the day format string 
set @dayFormat = master.dbo.fn_pcre_replace(@formatString, '.*?(d{1,4}).*',  '$1') 

-- If the format string contains a format for the month 
if charindex('m', @formatString) > 0 
-- Get the month format string 
set @monthFormat = master.dbo.fn_pcre_replace(@formatString, '.*? (m{1,4}|M{1,4}).*', '$1') 

- 如果格式字符串包含全年 的格式,如果CHARINDEX( 'Y',@formatString)> 0 - 拿到年終格式字符串 set @yearFormat = master.dbo.fn_pcre_replace(@formatString,'。 ?(y {2,4})。 ' '$ 1')

- 格式化基於格式串爲天 選擇@天一天值= 情況@dayFormat 當 'DD' 然後master.dbo.fn_pcre_replace(@formattedDate,' 'ddd'then substring(datename(dw,@formattedDate),1,3) 'dddd'then datename(dw,@formattedDate) else convert( VARCHAR,日(@formattedDate)) 端

- 格式化基於格式串月 選擇@月的月份值= 情況@monthFormat 0123當'mm'then master.dbo.fn_pcre_replace(convert(varchar,@inputDate,101),'^(\ d +)/.*','$ 1') when'mmm'then master.dbo.fn_pcre_replace(@ formattedDate, '\ d + \ s(\ w +)\ S \ d +', '$ 1') 當 'MMMM' 然後DATENAME(男,@formattedDate) 其他轉換(VARCHAR,月(@formattedDate)) 結束

- 格式化基於格式串全年 選擇@年= 情況下,年值@yearFormat
當 'YY',那麼SUBSTRING(轉換(VARCHAR,年(@formattedDate)),3,2) else convert(varchar,year(@formattedDate)) end

組@returnValue = @formatString

- 如果一天格式指定 如果@dayFormat <> '' - 更換日的格式串與實際日期值 組@returnValue = master.dbo 。fn_pcre_replace(@returnValue,@dayFormat,@day)

- 如果月份格式指定 如果@monthFormat <> '' - 更換月格式字符串與實際月 組@returnValue =主人。 dbo.fn_pcre_replace(@returnValue,@monthFormat,@month)

- 如果指定了年份格式 如果@yearFormat <>' - 更換年份格式字符串的實際年 集@returnValue = master.dbo.fn_pcre_replace(@returnValue,@yearFormat,@year)

- 返回格式化的值 return @returnValue end

+0

Vijay,希望這可能有所幫助。 –

+0

創建函數時,它給我錯誤在這一行:master.dbo.fn_pcre_replace – Vijay