Đoạn mã sau sẽ trả về 1900-01-01 khi trường DOB là null. Tôi muốn (và dự kiến) nó trả về một chuỗi trống ('') nhưng không được. Làm thế nào tôi nên tiến hành để có được kết quả mong muốn của tôi?
isnull(convert(date,DOB,1),'')
Đoạn mã sau sẽ trả về 1900-01-01 khi trường DOB là null. Tôi muốn (và dự kiến) nó trả về một chuỗi trống ('') nhưng không được. Làm thế nào tôi nên tiến hành để có được kết quả mong muốn của tôi?
isnull(convert(date,DOB,1),'')
Câu trả lời:
Bạn không thể nhận được một chuỗi trống vì bạn đang trả về DATE
loại giá trị từ đó ISNULL
.
Mỗi MSDN ,ISNULL
Trả về cùng loại với check_expression. Nếu một NULL bằng chữ được cung cấp dưới dạng check_expression, trả về kiểu dữ liệu của thay thế_value. Nếu một NULL theo nghĩa đen được cung cấp dưới dạng check_expression và không có thay thế_value nào được cung cấp, trả về một int.
Nếu bạn đang kiểm tra xem giá trị NULL
đó có phải hay không , thì không cần phải chuyển đổi nó thành một ngày, trừ khi bạn muốn trả về giá trị ngày (mà bạn dường như không).
Thay vào đó, sử dụng:
SELECT ISNULL( DOB , '')
Cái nào sẽ trở lại
''
nếu giá trị là NULL
.
Một NULL
ngày là NULL
(không có giá trị). Mặt khác, một chuỗi rỗng ước tính 0
, trong SQL Server hoàn toàn là một số nguyên biểu thị số ngày kể từ đó 1900-01-01
.
Nếu bạn đang tìm cách trả về một giá trị cho DOB khi nó được điền và xóa giá trị null khi không có DOB được điền. Bạn có thể thử điều này nhưng DOB sẽ là một varchar chứ không phải là một loại ngày.
isnull(cast(cast(DOB as date)as varchar),'') as DOB (SQL SERVER)
VARCHAR
một DATE
trở lại VARCHAR
không có ý nghĩa gì. Khi bạn loại bỏ điều vô nghĩa đó, câu trả lời của bạn giống như câu trả lời được chấp nhận với ít giải trình hơn.
datetime
và chỉ cần ngày YYYY-MM-DD
. Vì vậy, bằng cách đúc khi date
tôi thả thời gian. Sau đó đúc varchar
cho phép sử dụng isnull
chức năng. Vì vậy, tôi vẫn nhận được một ngày cho các bản ghi dân cư và loại bỏ các giá trị null. Nếu không, tôi đã nhận được 1900-01-01 00:00:00.000
.
Chỉ cần tạo một cái nhìn
TẠO VIEW test_view
NHƯ
trường hợp CHỌN khi năm (DOB) <= 1900 sau đó null DOB khác kết thúc dưới dạng DOB, đôi khi, id từ kiểm tra;
và sau đó sử dụng nó thay vì bảng gốc: chọn * từ test_view
sử dụng
chọn isnull (Chuyển đổi (Varchar (500), Ngày, 106), '')
nó hoạt động
NULL
ngày đang nóiSELECT CAST('' AS DATE)
. Kiểu dữ liệu làDOB
gì?