Это один из тех примеров того, как существует похожая функциональность между SQL и различными расширениями, но они настолько различны, что вы не можете гарантировать переносимость между всеми базами данных.
Ключевое слово SUBSTRING, использующее синтаксис PostgreSQL (без упоминания о сопоставлении с образцом) - ANSI-99 . Почему это заняло у них так много времени, я не знаю ...
Суть в том, что вам нужно получить подстроку существующего значения столбца, поэтому вам нужно знать, как называются функции подстроки базы данных.
Oracle
SELECT SUBSTR('abcd_01', -2) FROM DUAL
В Oracle нет функции RIGHT, в любом случае, это действительно просто оболочка для функции подстроки. Но Oracle SUBSTR позволяет вам указать отрицательное число для обработки строки в обратном порядке (конец к началу).
SQL Server
Два варианта - SUBSTRING и RIGHT :
SELECT SUBSTRING('abcd_01', LEN('abcd_01') - 1, 2)
SELECT RIGHT('abcd_01', 2)
Для краткости ПРАВО идеально. Но для мобильности SUBSTRING - лучший выбор ...
MySQL
Как и SQL Server, три опции - SUBSTR , SUBSTRING и RIGHT :
SELECT SUBSTR('abcd_01', LENGTH('abcd_01') - 1, 2)
SELECT SUBSTRING('abcd_01', LENGTH('abcd_01') - 1, 2)
SELECT RIGHT('abcd_01', 2)
PostgreSQL
PostgreSQL имеет только SUBSTRING :
SELECT SUBSTRING('abcd_01' FROM LENGTH('abcd_01')-1 for 2)
... но он поддерживает ограниченное сопоставление с образцом, которое, как вы можете видеть, не поддерживается в других местах.
SQLite * * тысяча пятьдесят-один
SQLite поддерживает только SUBSTR :
SELECT SUBSTR('abcd_01', LENGTH('abcd_01') - 1, 2)
Заключение
Используйте ПРАВО, если оно доступно, тогда как SUBSTR / SUBSTRING было бы лучше, если бы была необходимость перенести запрос в другие базы данных, чтобы для других было ясно, что происходит, и было бы проще найти эквивалентные функции.