2016-11-04 11 views
-1

у меня есть столбец с неопределенной информацией о дате рождения, отображается в одном Ot следующих способов (где 0 означает, что цифры 0-9):Как удалить символы после определенного символа числа

  • 0000?
  • 0000 ??
  • 0000 !!
  • 0000?
  • et sim.

Я хотел бы удалить все символы, следующие за четырьмя четырьмя цифрами. Я пробовал использовать варианты UPDATE [test] SET BYEAR = left(BYEAR,LEN(FAAR)-4);, попробовал поменять его справа, выбрав разные номера для удаления, но не нашел способ конкретно сказать ему сохранить первые четыре номера и удалить остальные.

Вся помощь была бы очень признательна.

Аналогичный вопрос для Perl, Python был опубликован, но я не нашел решение для этого в Access/SQL. Я работаю над локально хранимым db, который при соединении будет запущен на сервере Oracle.

+2

Oracle, Access или оба? – Aleksej

+0

Почему вы не просто SELECT SUBSTR (ColumnName, 1, 4) – Veljko89

+0

Мне не совсем понятно, почему 'left()' не подходит или почему вам нужно 'len()'. Вы имеете в виду, что четыре первых цифры могут быть не в начале строки? Например. '' Foo 0879 Bar !! ''? –

ответ

3

В MS Access, вы можете сохранить первые четыре символа, выполнив:

UPDATE [test] 
    SET BYEAR = left(BYEAR, 4); 

Это не проверяет, что первые четыре символа на самом деле цифры, но он делает то, что вы хотите для данных, которые вы предоставили.

+0

Есть ли способ заставить его сначала проверить номера? Это не обязательно, но для последующего использования было бы неплохо узнать, как это сделать. –

+1

@CannedMan. , , Это возможно, но не так, как в MS Access, так и в Oracle. –

+0

Если у вас есть чистый SQL-способ, это было бы хорошим дополнением к вашему ответу, но я предполагаю, согласно вашему ответу, что такое решение не будет работать как в MSA, так и в Oracle, - что там нет. –

0

В Oracle, вы можете попробовать следующее:

WITH TEST(T) AS 
(
    SELECT 'xx0000?' FROM DUAL UNION ALL 
    SELECT '0000???' FROM DUAL UNION ALL 
    SELECT '0000 ?' FROM DUAL UNION ALL 
    SELECT 'xx00009' FROM DUAL UNION ALL 
    SELECT '000099?' FROM DUAL 
) 
SELECT REGEXP_SUBSTR(T, '[0-9]{4}') 
FROM TEST 

REGEXP_SUBSTR(T,'[0-9]{4}') 
---------------------------- 
0000 
0000 
0000 
0000 
0000 

В вашей ситуации:

update yourTable set yourField = REGEXP_SUBSTR(yourField , '[0-9]{4}') 
Смежные вопросы