
這確實讓我困惑了幾天,正在尋求幫助。我正在使用 SQL Server 2017。
我正在嘗試處理來自自由格式字段的字串,並將它們轉換為“dd/mm/yyyy”格式的日期,或者如果它們不是這種格式,則只需逐字顯示文字。
我在視圖中需要這個,所以不能使用設定語言。聽起來很簡單使用轉變和日期但似乎不起作用。
因此,對於下面的程式碼片段(請記住這將在視圖中),我想讀取文本,並且如果字串轉換為日期(即採用“dd/mm/yyyy”格式,則運行轉換為一個日期,因為我需要Excel 的日期格式來取得(透過連接SQL Sever 資料庫)),如果它沒有轉換為日期,則按原樣顯示文字。
create table dateTest1
( idx int,
dateStringTest varchar(15)
);
insert into dateTest1 (idx, dateStringTest)
values (1, '13/01/2021'), (2, 'no');
select
case when isdate(convert(datetime, dateStringTest, 103)) = 1
then convert(datetime, dateStringTest, 103)
else dateStringTest
end as dtres
from dateTest1
--where idx = 1
-- error: Msg 241, Level 16, State 1, Line 15 Conversion failed when converting date and/or time from character string.
-- this error happens for idx = 2. Idx = 1 works ok
對此的任何幫助將不勝感激,因為它正在我的頭腦中。
預先感謝保羅
答案1
我不確定您的資料庫是否適合執行此操作。與其他一些函數相比,SQL Server 中的資料轉換函數有點「笨拙」。
但是,從資料庫的角度來看:
如果某事是應該成為一個日期,那麼它應該一個約會。
它可能是「缺失」(即可為空),但不能是其他任何東西。
如果它是是別的東西,那就不該被對待作為A日期。
使用者無法進入日期- 只有角色表示其中。
顯示應用程式中的[數字和]日期需要在「出路」上進行格式化。
將[數字和]日期讀入您的應用程式需要相反的操作,即在「進入」時「取消格式化」(當然還有驗證)。
數據應總是被儲存在正確的資料類型 - “正確的工具完成正確的工作”。
自由文字解析是大概最好在您的應用程式中完成,提取日期值,驗證它並“取消格式化”,然後儲存它。