Функция REVERSE

Эта функция переворачивает строку, как бы читая ее справа налево. То есть результатом запроса

SELECT REVERSE('abcdef');
🚫
[[ error ]]
[[ column ]]
NULL [[ value ]]
будет fedcba. Если бы отсутствовала функция RIGHT, то запрос

SELECT RIGHT('abcdef', 3);
🚫
[[ error ]]
[[ column ]]
NULL [[ value ]]

можно было бы равносильно заменить запросом

SELECT REVERSE(LEFT(REVERSE('abcdef'), 3));
🚫
[[ error ]]
[[ column ]]
NULL [[ value ]]

Польза этой функции в следующем. Пусть нам требуется определить позицию не первого, а последнего вхождения некоторого символа (или последовательности символов) в строке. Вспомним пример, в котором мы определяли позицию первого символа а в названии корабля California:

SELECT CHARINDEX('a', name) first_a
FROM Ships
WHERE name = 'California';
🚫
[[ error ]]
[[ column ]]
NULL [[ value ]]

Определим теперь позицию последнего вхождения в это название символа а. Функция CHARINDEX(‘a’, REVERSE(name)) позволит найти эту позицию, но справа. Для получения позиции этого же символа слева достаточно написать

SELECT LEN(name) + 1 - CHARINDEX('a', REVERSE(name)) first_a
FROM Ships
WHERE name = 'California';
🚫
[[ error ]]
[[ column ]]
NULL [[ value ]]