Sql-Server
我如何在兩個字元串類型的日期之間進行搜尋
考慮這兩個表。我使用波斯日期,所以我必須將
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)