我想这个转换成一个时期的格式,所以例如2018_05(YYYY_MM)。目前的数据是在DD / MM / YYYY格式。
我尝试了投代码,但它返回我YYYY_DD。
SELECT
CASE WHEN RESERVED_FIELD_4 IS NULL THEN NULL
ELSE cast(year(RESERVED_FIELD_4) as Nvarchar (4))
+'_'+right('00'+cast(month(RESERVED_FIELD_4) as Nvarchar (2)),2)
END AS [DATAFEED_PERIOD]
我希望/想看YYYY_MM。
假设RESERVED_FIELD_4
是字符串类型(char
/ nchar
/ varchar
/ nvarchar
)的最简单的解决方案将是使用substring
:
CASE
WHEN RESERVED_FIELD_4 IS NULL THEN NULL
ELSE SUBSTRING(RESERVED_FIELD_4, 7, 4) + '_'+ SUBSTRING(RESERVED_FIELD_4, 4, 2)
END AS [DATAFEED_PERIOD]
如果它是一个date
/ datetime
/ datetime2
数据类型,最简单的办法是使用format
:
FORMAT(RESERVED_FIELD_4, 'yyyy_MM')
但有更好的表现,你可以使用convert
和stuff
:
SELECT STUFF(CONVERT(char(6), RESERVED_FIELD_4, 112), 5, 0, '_')
如果您的格式实际上是d/m/y
最简单的方法是转换到日期,不是回来字符串:
SELECT STUFF(CONVERT(char(6), CONVERT(Date, RESERVED_FIELD_4, 103), 112), 5, 0, '_')
这是存储与VARCHAR
列日的通病。你是猜测,存储的模式是DD/MM/YYYY
但SQL引擎不知道,目前假设MM/DD/YYYY
模式。
请检查的结果:
-- MM/DD/YYYY
SELECT
DAY ('05/01/2019'), -- 1
MONTH('05/01/2019') -- 5
-- DD/MM/YYYY
SELECT
DAY ('25/05/2019'), -- Conversion failed when converting date and/or time from character string
MONTH('25/05/2019') -- Conversion failed when converting date and/or time from character string.
要显示你想要的正确使用字符串函数:
SELECT
RIGHT(RESERVED_FIELD_4, 4) + '_' + SUBSTRING(RESERVED_FIELD_4, 4, 2)
但你应该真正解决您VARCHAR
列中的值,施展他们DATE
和值存储为DATE
。
ALTER TABLE YourTable ADD ReservedField4Date DATE
UPDATE YourTable SET
ReservedField4Date = CONVERT(DATE,
RIGHT(RESERVED_FIELD_4, 4) -- Year
+ '-' + SUBSTRING(RESERVED_FIELD_4, 4, 2) -- Month
+ '-' + LEFT(RESERVED_FIELD_4, 2)) -- Day
ALTER TABLE YourTable DROP COLUMN RESERVED_FIELD_4
EXEC sp_rename 'SchemaName.YourTable.ReservedField4Date', 'RESERVED_FIELD_4', 'COLUMN'
要注意的是更改列类型可能会影响假设这是一个VARCHAR
列的其他查询。
如果你的数据是在DD / MM / YYYY格式,然后它被存储为一个字符串。因此,字符串函数浮现在脑海中:
select right(RESERVED_FIELD_4) + '_' + substrint(RESERVED_FIELD_4, 4, 2)
在SQL-SERVER,您可以使用“格式”
format(dy,@your_date) as day_of_year
month(@your_date) as month
尝试这个:
Select concat(month(@your_date),'_'year(@your_date)) as your_period
this是参考
为什么不只是做谈话? :
SELECT REPLACE(CONVERT(VARCHAR(7), CONVERT(date, RESERVED_FIELD_4, 101), 102), '.', '_')
这是假定RESERVED_FIELD_4
是date
类型。