Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / В поле- только цифры / 12 сообщений из 12, страница 1 из 1
27.04.2010, 17:00
    #36601186
kasyanov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В поле- только цифры
Добрый день!
Необходимо написать запрос, условие которого будет возвращать истину для всех записей, у которых конкретное поле содержит значения, состоящие только из цифр.

Код: plaintext
1.
2.
3.
create table digittest(s varchar( 32 ));
insert into digittest values ('123-456'),('675432'),('1101.12');
select * from didgittest where s "состоит только из цифр";
Должна вернуться только запись '675432'.

Вообще-то это нужно чтобы сделать check constraint только на цифры

Алексей.
...
Рейтинг: 0 / 0
27.04.2010, 17:22
    #36601273
kasyanov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В поле- только цифры
В Оракле оказалось так:

Код: plaintext
1.
2.
3.
select * from digittest
where 
regexp_like(s, '^[[:digit:]]+$');


А в DB2 как?
...
Рейтинг: 0 / 0
27.04.2010, 17:39
    #36601318
kasyanov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В поле- только цифры
Ребята с форума Оракла предложили

select * from digittest
where
TRANSLATE(s,'A0123456789','A') IS NULL;
...
Рейтинг: 0 / 0
27.04.2010, 18:03
    #36601388
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В поле- только цифры
Алексей,

WHERE TRANSLATE(s, 'A', ' 0123456789')=''
...
Рейтинг: 0 / 0
27.04.2010, 18:32
    #36601461
BuryCommoner
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В поле- только цифры
Можно через XQuery:
Код: plaintext
1.
SELECT XMLCAST(XMLQUERY('if (fn:matches($digittest, "[\P{N}]")) then 13 else 0' PASSING t.digittest AS "digittest") AS SMALLINT) AS digitable, t.digittest
FROM TABLE(VALUES ('123-456'),('675432'),('1101.12')) AS t(digittest)

А зачем в TRANSLATE(s, 'A', ' 0123456789')='' вторым параметром буква А?
...
Рейтинг: 0 / 0
27.04.2010, 18:37
    #36601467
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В поле- только цифры
BuryCommonerА зачем в TRANSLATE(s, 'A', ' 0123456789')='' вторым параметром буква А?Вместо 'A' может быть любой нецифровой символ.
Нужно для транслирования пробела (первый символ 3-го аргумента), который может быть в середине цифровой последовательности, в нецифру.
...
Рейтинг: 0 / 0
27.04.2010, 18:42
    #36601470
BuryCommoner
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В поле- только цифры
Спасибо. Не заметил, что там пробел есть :)
...
Рейтинг: 0 / 0
27.04.2010, 19:00
    #36601509
kasyanov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В поле- только цифры
Mark BarinsteinАлексей,

WHERE TRANSLATE(s, 'A', ' 0123456789')=''

Только так у меня почему-то не работает. У меня 9.7 с DB2_COMPATIBILITY_VECTOR=ORA
...
Рейтинг: 0 / 0
27.04.2010, 23:34
    #36601849
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В поле- только цифры
kasyanov,

Интересно - неужто с DB2_COMPATIBILITY_VECTOR=ORA у Translate параметры местами поменялись? Но вы же легко это можете проверить.

Код: plaintext
1.
2.
3.
4.
5.
6.
with 
  t(s) as (
    values ('123-456'),('675432'),('1101.12')
  )
select TRANSLATE(s, 'A', ' 0123456789'), TRANSLATE(s, ' 0123456789', 'A')
from t
...
Рейтинг: 0 / 0
28.04.2010, 11:38
    #36602485
kasyanov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В поле- только цифры
Victor Metelitsakasyanov,

Интересно - неужто с DB2_COMPATIBILITY_VECTOR=ORA у Translate параметры местами поменялись? Но вы же легко это можете проверить.

Код: plaintext
1.
2.
3.
4.
5.
6.
with 
  t(s) as (
    values ('123-456'),('675432'),('1101.12')
  )
select TRANSLATE(s, 'A', ' 0123456789'), TRANSLATE(s, ' 0123456789', 'A')
from t


Да, действительно поменялись!

Ваш запрос возвращает на базе с DB2_COMPATIBILITY_VECTOR=ORA:
123-456 - 675432 A 1101.12 .

На базе с пустым DB2_COMPATIBILITY_VECTOR
- 123-456 675432 . 1101.12

Из документации:

В Oracle:
>──TRANSLATE──('char' , 'from_string' , 'to_string')──><

В DB2:
>>-TRANSLATE--(--graphic-string-exp--,--to-string-exp--,--from-string-exp-->

.-,--' '------.
>--+-------------+--)------------------------------------------><
'-,--pad-char-'
...
Рейтинг: 0 / 0
28.04.2010, 12:10
    #36602584
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В поле- только цифры
kasyanovMark BarinsteinАлексей,

WHERE TRANSLATE(s, 'A', ' 0123456789')=''

Только так у меня почему-то не работает. У меня 9.7 с DB2_COMPATIBILITY_VECTOR=ORA
Для DB2_COMPATIBILITY_VECTOR=ORA надо:

WHERE TRANSLATE(trim(s), 'A', ' 0123456789') IS NULL
...
Рейтинг: 0 / 0
28.04.2010, 13:22
    #36602817
kasyanov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В поле- только цифры
Mark BarinsteinkasyanovMark BarinsteinАлексей,

WHERE TRANSLATE(s, 'A', ' 0123456789')=''

Только так у меня почему-то не работает. У меня 9.7 с DB2_COMPATIBILITY_VECTOR=ORA
Для DB2_COMPATIBILITY_VECTOR=ORA надо:

WHERE TRANSLATE(trim(s), 'A', ' 0123456789') IS NULL

Только второй и третий параметр еще местами поменять
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / В поле- только цифры / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]