Tôi đã có các dòng dưới đây trong mệnh đề where truy vấn của tôi, nhưng tôi tiếp tục nhận được lỗi này:SQL charindex ném tham số chiều dài không hợp lệ được chuyển đến hàm LEFT hoặc SUBSTRING vì dấu chấm?
Msg 537, Level 16, State 3, Line 3
Invalid length parameter passed to the LEFT or SUBSTRING function.
SUBSTRING(
[email],
1,
CHARINDEX('@',[email])-1
) =
SUBSTRING(
[email],
CHARINDEX('@',[email])+1,
CHARINDEX('.', [email])
)
Các lỗi được có nguồn gốc từ CHARINDEX('.', [email])
Nếu tôi thay đổi thời gian để thư, Tôi không gặp lỗi. Mỗi bản ghi có một khoảng thời gian trong nó, và thậm chí nếu không, hàm charindex sẽ trả về 0, điều này sẽ không gây ra lỗi này. Tôi phải thiếu một cái gì đó đơn giản. Hãy giúp tôi!
EDIT.
Tôi đã thử ném nó bên trong một isnull, isnull(CHARINDEX('.', [email]), 1)
chỉ trong trường hợp nó đã trở về null vì lý do nào đó, nhưng điều đó đã không hoạt động.
+1 Đây là điều duy nhất làm từ ... nhưng OP cho biết " Nếu tôi thay đổi thời gian thành một lá thư, tôi sẽ không gặp lỗi. " –
Tôi hiểu, nhưng điều đó không thể đúng. Tham số thứ 2 có thể là số âm (mặc dù tôi thừa nhận điều đó là lạ). Tham số thứ 3 phải là "số nguyên dương". Điều này bao gồm 0. Cách duy nhất để có được tham số chiều dài không hợp lệ là có thông số thứ 3 là số âm (nhỏ hơn 0).Charindex không thể trả về một số âm, do đó, vấn đề không thể với hàm chuỗi con thứ 2, và PHẢI là tham số thứ 3 của hàm chuỗi con đầu tiên. –
Cảm ơn! Bảng tôi đang chạy nó là cực kỳ lớn, vì vậy khi tôi chạy truy vấn với một lá thư ở vị trí của thời kỳ, kết quả bắt đầu populating cho một vài phút trước khi nó nhấn một mà không có biểu tượng @ và ném lỗi (xin lỗi, không bắt được điều này là do sự thiếu kiên nhẫn của tôi). Cảm ơn đã giúp đỡ! –