Stored-Procedures

SQL USING CAST 在儲存過程中的查詢中

  • November 29, 2020

我試圖在具有強制轉換功能的儲存過程中使用查詢。但是在執行 SP 時出現錯誤

從字元串轉換日期和/或時間時轉換失敗。

SELECT * 
 FROM TEMPTABLE 
WHERE Status = 'A' 
  AND technician = 5 
  and schid not in (1047) 
  and CAST(approxstartdate as datetime)  > = 
      ( select CAST(approxstartdate as datetime)  
          from trscheduler where Status = 'A' 
           AND technician = 5 
           and schid = 1059
      ) 
order by  CAST(approxstartdate as datetime) 

此查詢用於游標。

請讓我知道一個替代方案。

您在approxstartdate 列中有無法轉換為datetime的數據,這是壞數據,如果您看到該數據是什麼,您可能也不知道如何將其轉換為日期時間。

如果您使用的是 SQL Server,請查看try_convert如果值無法轉換,則返回 null。您可以使用此功能查找表中無法轉換的值,然後修復或刪除它們。

這裡的問題要麼是錯誤的數據,要麼是使用了不正確的日期格式。

假設您使用的是 MSSQL,因為您沒有說明什麼 RDBMS,請使用以下程式碼來辨識無法轉換為 DATETIME 的記錄:

SELECT * 
FROM 
(
   SELECT *, TRY_CAST(approxstartdate AS DATETIME) as cast_approxstartdate
   FROM TEMPTABLE 
) src
WHERE src.cast_approxstartdate IS NULL

辨識出它們後,您可以清理錯誤數據或確定其他解決方案,例如,您可能需要調整會話的 DATEFORMAT 設置,或者數據庫的應用程序可能會以不正確的格式輸入數據,具體取決於客戶端機器的區域設置。

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