月が> = 10の場合、mddyyまたはmmddyy(数値形式)からmmddyy日付形式に変換する必要がある日付フィールドがあります。ウェブ上でまだ答えを見つけていません。
3 に答える
これは、私が求めていた一般的な外観でそれを取得します。
select
CASE WHEN LEN(CONVERT(varchar(6), datefield)) < 6
THEN ('0' + LEFT(CONVERT(varchar(6), datefield),1) + '-' +
SUBSTRING(CONVERT(varchar(6), datefield),2,2) + '-' +
LEFT(CONVERT(varchar(7), datefield),4))
ELSE (LEFT(CONVERT(varchar(6), datefield),2) + '-' +
SUBSTRING(CONVERT(varchar(6), datefield),3,2) + '-' +
LEFT(CONVERT(varchar(7), datefield),4))
END as DesiredDate
My above solution technically does not work nor is consistent with SQL's system-wide setting in SQL Server - the "two-digit year cutoff". Typically SQL Server considers any date with a 2 digit year or value of 49 as 20xx year or 2049. Dates with a 2 digit year after that, say 70 get interpreted as 19xx (70 -> 1970). Thanks to marc_s for his post on the topic. My solution does not require a custom function or SQL Server setting change, and it does account for both one and two digit months. It is:
Select
Convert (datetime, --varchar depending on desired format--
CASE
WHEN LEN(CONVERT(varchar(6), dt.datefield)) < 6 and
SUBSTRING(CONVERT(varchar(6), dt.datefield),4,2) < 50
THEN ('0' + LEFT(CONVERT(varchar(6), dt.datefield),1)) + '-' +
SUBSTRING(CONVERT(varchar(6), dt.datefield),2,2) + '-' +
('20'+RIGHT(CONVERT(varchar(6), dt.datefield),2))
WHEN LEN(CONVERT(varchar(6), dt.datefield)) = 6 and
SUBSTRING(CONVERT(varchar(6), dt.datefield),5,2) < 50
THEN (LEFT(CONVERT(varchar(6), dt.datefield),2)) + '-' +
SUBSTRING(CONVERT(varchar(6), dt.datefield),2,2) + '-' +
('20'+RIGHT(CONVERT(varchar(6), dt.datefield),2))
WHEN LEN(CONVERT(varchar(6), dt.datefield)) < 6 and
SUBSTRING(CONVERT(varchar(6), dt.datefield),4,2) >= 50
THEN ('0' + LEFT(CONVERT(varchar(6), dt.datefield),1)) + '-' +
SUBSTRING(CONVERT(varchar(6), dt.datefield),5,2) + '-' +
('19'+RIGHT(CONVERT(varchar(6), dt.datefield),2))
WHEN LEN(CONVERT(varchar(6), dt.datefield)) = 6 and
SUBSTRING(CONVERT(varchar(6), dt.datefield),5,2) >= 50
THEN (LEFT(CONVERT(varchar(6), dt.datefield),2)) + '-' +
SUBSTRING(CONVERT(varchar(6), dt.datefield),2,2) + '-' +
('19'+(LEFT(CONVERT(varchar(7), dt.datefield),2)))
End) as MaintDate
FROM
dbo.date_table dt
FORMATを使用できます:-
FORMAT ( table.myDateColumn, 'd', 'en-US' )
編集:-
これを試して:-
SELECT LTRIM(STR(MONTH(DateColumn)))+'/'+LTRIM(STR(DAY(DateColumn)))+'/'+STR(YEAR(DateColumn),4)