Используйте следующее, чтобы добиться этого, когда местоположение в пространстве является переменным или даже когда оно фиксировано, и вы хотите сделать более надежный запрос (в случае, если он перемещается позже):
SELECT CAST(SUBSTR(LTRIM('00123 45'), 1, CASE WHEN LOCATE(' ', LTRIM('00123 45')) <= 1 THEN LEN('00123 45') ELSE LOCATE(' ', LTRIM('00123 45')) - 1 END) AS BIGINT)
Если вы знаете, что столбец всегда будет содержать пробел после начала:
SELECT CAST(LOCATE(LTRIM('00123 45'), 1, LOCATE(' ', LTRIM('00123 45')) - 1) AS BIGINT)
оба эти результата:
123
так что ваш запрос будет
SELECT CAST(SUBSTR(LTRIM(myCol1), 1, CASE WHEN LOCATE(' ', LTRIM(myCol1)) <= 1 THEN LEN(myCol1) ELSE LOCATE(' ', LTRIM(myCol1)) - 1 END) AS BIGINT)
FROM myTable1
Это удаляет любой контент после первого пробела (игнорируя начальные пробелы), а затем преобразует остаток в 64-битное целое число, которое затем удаляет все начальные нули.
Если вы хотите сохранить все числа и просто удалить начальные нули и любые пробелы, которые вы можете использовать:
SELECT CAST(REPLACE('00123 45', ' ', '') AS BIGINT)
Хотя мой ответ может показаться довольно многословным по сравнению с простым SELECT CAST(SUBSTR(myCol1, 1, 5) AS BIGINT) FROM myTable1
, но он допускает использование пробела не всегда, в ситуациях, когда значение myCol1
не имеет формы nnnnn nn
, если строка nn nn
тогда преобразование в int
завершится неудачей.
Не забывайте быть осторожным, если вы используете функцию TRIM
для удаления начальных нулей, и на самом деле во всех ситуациях вам нужно будет проверить ваш код с данными, такими как 00120 00
, и посмотреть, вернется ли он 12
вместо правильное значение 120
.