我有這樣的情況。我需要有 2 列 1)只是從表中提取資料(就像它一樣)r.[RCLDTE](星期幾)和 2 列)我基本上需要查看第一列并使其成為星期六星期。
SELECT r.[RCLDTE] AS 'Day of Week'
,r.[RCLDTE] AS 'Week Ending Day (Saturday)'
在我從事類似專案之前,我只是使用了這段代碼并添加到 WHERE 陳述句中。
WHERE CONVERT(DATE, CONVERT(CHAR(8), r.[RCLDTE] )) = cast(DATEADD(dd, DATEPART(DW,GETDATE())*-1, GETDATE()) as date)
此代碼將日期列更改為星期六。
但是,在這里我有不同的情況。我需要 2 列 1) 原樣和 2) 日期將是 r.[RCLDTE] 列的一周中的星期六,因為我理解的方式是我不能使用 WHERE 陳述句,因為它會影響兩列。
有人知道我怎樣才能讓第一列保持原樣,第二列在星期六。
請告訴我。
謝謝。
uj5u.com熱心網友回復:
為避免有人更改其中一個DATEFIRST或LANGUAGE設定時出現問題,您可以使用它。此外,鑒于您numeric出于某種原因將日期存盤在列中(您確實應該向擁有系統的人提供反饋,以便他們可以修復它),我們必須首先嘗試將這些值轉換為日期(它們可能不都是有效,這是使用錯誤資料型別的問題之一):
;WITH t AS
(
SELECT *, ProperDate = CASE WHEN ISDATE(CONVERT(char(8), RCLDTE)) = 1
THEN CONVERT(date, CONVERT(char(8), RCLDTE)) END
FROM dbo.tablename
)
SELECT [Language] = @@language, [Datefirst] = @@datefirst,
RCLDTE = CASE WHEN ProperDate IS NULL THEN RCLDTE END,
[Day of Week] = ProperDate,
[Saturday] = DATEADD
(
DAY,
6 - ((DATEPART(WEEKDAY, ProperDate) @@DATEFIRST - 1) % 7),
ProperDate
)
FROM t;
- 更新了db<>fiddle,它還演示了垃圾資料的處理以及 SQL Server 版本太舊
TRY_CONVERT()但還不存在(至少 14 年前)。
uj5u.com熱心網友回復:
這是一種方法:
select
r.RCLDTE AS 'Day of Week'
, dateadd(day, 7 - datepart(weekday, r.RCLDTE) , r.RCLDTE)
from tablename r
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/418518.html
標籤:
上一篇:SQLServer行內表函式
