2017-01-16 8 views
0

SQL Serverのデータベーステーブルに以下の日付時刻の値を設定しています。私は月にSQL Datetime形式の変更

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

よう&日付の値を交換したい

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

は、それを達成する方法はありますか? このような形式のレコードが複数あります。

Excelを使って同じものを変換してクエリを作成しようとしましたが、それは動作していません。

+1

SQL Serverに格納する部分を処理させる方がよいでしょう。あなたは、dbから来るdatetimeを任意のフォーマットに変換する必要があります。 –

+0

実際には、以前のアプリケーションでSQLにデータを入力する際に​​エラーが発生しました。月と日付の場所を入れ替えました。今私はそれを修正しようとしています...あなたが見ている日付は、2017年1月の2&9です。 – Vijay

+0

DateTimeは表示形式なしで格納されます。 DateTime値をvarchar列に格納する場合は、DateTime列に変更する必要があります。 –

答えて

0

私のコメントに書いたとおり、DateTime are stored without display format
あなたが特定の形式で日付を選択したい場合は、あなたがFormat()(バージョン2012以降で利用可能)またはCONVERT()のいずれかを使用する必要があります(事前に定義されたフォーマットをサポートしています)今

、ご希望のフォーマットが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 - 年の形式の文字列を取得します。 @ yearFormat = master.dbo.fn_pcre_replace(@formatString、 ')を設定します。 ?(y {2,4})。 ' '$ 1')

- @dayFormat日 選択@の日のためのフォーマット文字列に基づいて、日の値をフォーマット= ケースD-D 'を' をmaster.dbo.fn_pcre_replace(@formattedDateを' 'dddd'と入力した場合は、 の部分文字列(datename(dw、@formattedDate)、1、3) の場合は else( varchar型、日(@formattedDate))

エンド - 選択@月の月のフォーマット文字列に基づいて月の値をフォーマット= ケース@monthFormat 'mmm'と入力すると、master.dbo.fn_pcre_replace(convert(varchar、@inputDate、101)、 '^(\ d +)/.*'、 '$ 1')のときは、 formattedDate、 '(+ W \)\ dは+ \ S \ S \ D +'、 '$ 1') とき 'MMMM' をDATENAME(メートル、@formattedDate) が他の(変換varchar型、月(@formattedDate)) エンド

- 'yyは' をサブストリングとき (varchar型、年(@formattedDate))、3、2(変換)
@yearFormat年 選択@年= 場合のフォーマット文字列に基づいて年の値をフォーマット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