iT邦幫忙

2

MSSQL 一筆變成多筆 問題請教

  • 分享至 

  • xImage

您好:
如下資料
SELECT '1110919' 'ST', '1120918' 'END'

end時間,非月初,要把他拆成

1120901~1120918
1120919~1120930
兩筆

目前想到的是 做成兩筆

select * from (
    SELECT '1110919' 'ST', '1120918' 'END'
    UNION ALL 
    SELECT '1110919' 'ST', '1120918' 'END'
) x

在把他後續兩筆,做成日期

cross apply 沒有拆到KEY,無法2筆

是否還有其他較簡便的方式
謝謝

不好意思**** 有想到

select * from (
    select *, 月底函數(END) 'END_30'
    from (
        SELECT '1110919' 'ST', '1120918' 'END'

    ) x
) y cross apply(
    value(1,END ),(2,END_30)
) x(k,value)

來分拆

WUcheap iT邦研究生 4 級 ‧ 2024-07-05 09:45:22 檢舉
......問題看得好痛苦
尼克 iT邦大師 1 級 ‧ 2024-07-05 12:49:53 檢舉
請善用新增程式碼
noway iT邦研究生 1 級 ‧ 2024-07-06 22:23:18 檢舉
不好意思,修改了
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
純真的人
iT邦大師 1 級 ‧ 2024-07-05 15:35:59
最佳解答

參考@@...

declare @Tmp table(
	ID int
	,[St] varchar(10) 
	,[End] varchar(10) 
)

insert into @Tmp
values(1,'1110919','1120918')

select *
from ((
	select format(
		dateadd(
			year
			,-1911
			,convert(
				date
				,left(Convert(int,a.St) + 19110000,6) + '01'
			)
		)
		,N'yyyMMdd'
	)
	+ '~' 
	+ Convert(varchar,Convert(int,[St]) - 1) AreaDate
	from @Tmp a
)union all(
	select 
	Convert(varchar,[St])
	+ '~' 
	+ format(
		dateadd(
			year
			,-1911
			,Dateadd(
				day
				,-1
				,Dateadd(
					month
					,1
					,convert(
						date
						,left(Convert(int,a.[End] + 19110000),6) + '01'
					)
				)
			)
		)
		,N'yyyMMdd'
	)
	from @Tmp a
)) k

https://ithelp.ithome.com.tw/upload/images/20240705/20061369RWQV1237I5.png

noway iT邦研究生 1 級 ‧ 2024-07-06 22:23:52 檢舉

謝謝!

我要發表回答

立即登入回答