2017-01-16 162 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