/*
@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
SQL Serverに格納する部分を処理させる方がよいでしょう。あなたは、dbから来るdatetimeを任意のフォーマットに変換する必要があります。 –
実際には、以前のアプリケーションでSQLにデータを入力する際にエラーが発生しました。月と日付の場所を入れ替えました。今私はそれを修正しようとしています...あなたが見ている日付は、2017年1月の2&9です。 – Vijay
DateTimeは表示形式なしで格納されます。 DateTime値をvarchar列に格納する場合は、DateTime列に変更する必要があります。 –