Całkowicie przez przypadek dzisiaj biegałam instrukcji SQL do filtrowania niektórych elementów według daty, dla uproszczenia powiemy użyłemjaki sposób operator> + różni się od> = w SQL Server 2012
SELECT *
FROM [TableName]
WHERE [RecordCreated] >+ '2016-04-10'
Dopiero po uruchomieniu stwierdziłem, że użyłem> + zamiast> =, teraz byłem zdezorientowany, ponieważ oczekiwałbym błędu.
Próbowałem kilka innych odmian takich jak
>- -- Throws an error
<+ -- Ran successfully
<- -- Throws an error
Ilość wierszy zwrócony był dokładnie taki sam, czy użyłem> = lub> +
Po szukają w internecie nie mogłem znaleźć żadnego dokumentacja, która dotyczy bezpośrednio tej składni, tylko wtedy, gdy dwa operatory są używane oddzielnie.
Kolumna RecordCreated
to datetime
.
Czy jest to po prostu świetna składnia dla możliwej wspólnej pomyłki, czy też potencjalnie próbuje podać datę jako wartość liczbową?
interesujące. Spodziewam się tego analizować przy użyciu '' + jako operator jednoargumentowy (https://msdn.microsoft. com/en-us/library/ms174362.aspx), ale jestem zaskoczony, że działa na literał ciągu/daty. –
To nie jest operator. To dwaj operatorzy obok siebie. Otrzymasz różne wyniki, jeśli istnieją wiersze z 'RecordCreated' dokładnie równe' 2016-04-10'. –
Jest to błąd w analizatorze składni lub błąd w dokumentacji. 'SELECT + 'plus!'' Daje 'plus!', Mimo że na wszystkich kontach nie powinno, ponieważ jednoargumentowy plus rzekomo działa tylko na typy liczbowe, a operator konkatenacji ciągów wymaga innego wyrażenia. (Ponieważ ciąg pozostaje łańcuchem, nie jest to jeden z przypadków, w których fetysz T-SQL dotyczący niejawnych konwersji jest problemem.) –