powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / В поле- только цифры
12 сообщений из 12, страница 1 из 1
В поле- только цифры
    #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
В поле- только цифры
    #36601273
kasyanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Оракле оказалось так:

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


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

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

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

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

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


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