Sql-Server

我如何在兩個字元串類型的日期之間進行搜尋

  • November 29, 2016

考慮這兩個表。我使用波斯日期,所以我必須將startdate和聲明enddate為字元串(nvarchar(10))。

crt 表:

id title startdate enddate
--------------------------
1  xyz   1395/01/01  1395/12/29
2  xyy   1394/12/01  1395/05/05
3  cvb   1392/02/03  1394/02/03

季節表:

id title startdate enddate
--------------------------
1  spring95 1395/01/01  1395/03/31

我想寫一個查詢,給我一個賽季有效的crt記錄。即crt.startdate<=season.startdate and crt.enddate>=season.enddate

我怎麼做?

如果遇到性能問題,可以將日期儲存為整數而不是 varchar。1397-12-09 變為 13971209,所有數字保持順序,因此您仍然可以執行 BETWEEN 查詢。然後在展示的最後一點將您的結果轉換為日期格式。

下面的查詢可以幫助你。您可以使用轉換功能。

SELECT convert(datetime2, ‘1395/01/01’, 111) 將以 datatime2 格式返回 1395-01-01 00:00:00.0000000。為什麼要使用 datetime2,因為您提供的數據可能超出了通常的 datetime 格式的範圍。更多資訊可以在這個堆棧溢出問題中找到。

SELECT *
FROM crt AS C
   INNER JOIN season AS S
   ON C.id = S.id -- Or any required join condition
WHERE convert(datetime2, c.startdate, 111) <= convert(datetime2, s.startdate, 111)
   AND convert(datetime2, c.enddate, 111) >= convert(datetime2, s.enddate, 111)

引用自:https://dba.stackexchange.com/questions/156620