SQL 數值處理與多重條件簡化

September 21, 2021

本文介紹如何處理含小數的數值進退位、DATEDIFFDATEADD 等數種日期函式的應用,以及使用程式建立 SQL 語法時,如何簡化多重條件。

SQL 四捨五入與進退位

取得當月的 1 日

語法:

SELECT DATEADD(m, DATEDIFF(m, 0, '2020/10/15'), 0)
  • DATEDIFF(datepart, startdate, enddate): 上方語法中的 m 為月份的縮寫,表示要取得月份的差距,起始時間為 0,結束時間為 2020/10/15,將取得至今為止所有的月份差距。可使用的縮寫請參考官方語法說明。

  • DATEADD(datepart, number, date): 上方語法中的 m 為月份的縮寫,表示增加數量的單位,number 為增加的數量,date 為被計算的日期。將上方的 DATEDIFF 加入後,表示加入至今的所有月份至 0 上。結果即為當月的 1 日。

  • 官方語法說明: DATEDIFF (Transact-SQL) - SQL Server - Microsoft Docs

取得當年的第 1 日

  • 以下的語法,可以取得當年度的第一天,並轉為 NVARCHAR 型態。
SELECT CONVERT(NVARCHAR, YEAR(GETDATE())) + '/01/01' 

SQL 的多重條件簡化

  • 1=1 表示永遠成立。
  • 可以應用在使用程式碼串接 SQL 的情況下,用於簡化程式碼。
  • 若要選擇性的加入多個條件,需要寫出多個判斷式,以檢查是否要在前方加 AND 關鍵字。
  • 加入 1=1 條件後,條件一律可在前面加 AND,條件效果不受影響,且能簡化判斷式。
WHERE 1=1
AND ID = 'A123'
AND DATE = '2020/5/1'