sql как оператор для получения чисел только

Это, я думаю простая проблема, но не получение решения все же. Я хотел бы получить верные номера только из столбца, как объяснено здесь.

Позволяет говорят, что у нас есть varchar столбец со следующими значениями

ABC
Italy
Apple
234.62
2:234:43:22
France
6435.23
2
Lions

Здесь проблема состоит в том, чтобы выбрать числа только

select * from tbl where answer like '%[0-9]%' сделал бы это, но это возвращается

    234.62
    2:234:43:22
    6435.23
    2

Здесь, очевидно, 2:234:43:22 не желаем, поскольку это не верный номер.

Желаемый результат

        234.62
        6435.23
        2

Существует ли способ сделать это?

24
задан Jonathan Leffler 9 January 2010 в 08:09
поделиться

3 ответа

Вы можете попробовать это

ISNUMERIC ( Transact-SQL)

ISNUMERIC возвращает 1, когда ввод выражение оценивается как допустимое числовой тип данных; иначе это возвращает 0.

DECLARE @Table TABLE(
        Col VARCHAR(50)
)

INSERT INTO @Table SELECT 'ABC' 
INSERT INTO @Table SELECT 'Italy' 
INSERT INTO @Table SELECT 'Apple' 
INSERT INTO @Table SELECT '234.62' 
INSERT INTO @Table SELECT '2:234:43:22' 
INSERT INTO @Table SELECT 'France' 
INSERT INTO @Table SELECT '6435.23'
INSERT INTO @Table SELECT '2' 
INSERT INTO @Table SELECT 'Lions'

SELECT  *
FROM    @Table
WHERE   ISNUMERIC(Col) = 1
23
ответ дан 28 November 2019 в 22:25
поделиться

Для включения действительных символов можно использовать только следующие:

SQL

SELECT * FROM @Table
WHERE Col NOT LIKE '%[^0-9.]%'

Results

Col
---------
234.62
6435.23
2
41
ответ дан 28 November 2019 в 22:25
поделиться

Краткий обзор WSDL4J (это было давно, так как я работал непосредственно с этим проектом) говорит о том, что нет возможности специально предотвратить чтение импортированных схем. Возможно, вы наткнулись на ошибку в механизме десериализации схем WSDL4J. Тем не менее, если вы не заинтересованы в содержимом каких-либо схем, включая те, которые включены в документ WSDL, вы можете зарегистрировать свой собственный реестр расширений (просто измените класс ExecutureExtensionRegistry, чтобы исключить SchemaDeserializer).

В частности, не указывайте следующие строки:

mapExtensionTypes(Types.class, SchemaConstants.Q_ELEM_XSD_1999,
    SchemaImpl.class);
registerDeserializer(Types.class, SchemaConstants.Q_ELEM_XSD_1999,
    new SchemaDeserializer());
registerSerializer(Types.class, SchemaConstants.Q_ELEM_XSD_1999,
    new SchemaSerializer());

mapExtensionTypes(Types.class, SchemaConstants.Q_ELEM_XSD_2000,
    SchemaImpl.class);
registerDeserializer(Types.class, SchemaConstants.Q_ELEM_XSD_2000,
    new SchemaDeserializer());
registerSerializer(Types.class, SchemaConstants.Q_ELEM_XSD_2000,
    new SchemaSerializer());

mapExtensionTypes(Types.class, SchemaConstants.Q_ELEM_XSD_2001,
    SchemaImpl.class);
registerDeserializer(Types.class, SchemaConstants.Q_ELEM_XSD_2001,
    new SchemaDeserializer());
registerSerializer(Types.class, SchemaConstants.Q_ELEM_XSD_2001,
    new SchemaSerializer());
-121--4518759-

Как заявили другие, LUA - это довольно быстрый и простой способ встраивания языка сценариев в ваше приложение. Продукт нашей компании имеет макро-функцию, и я кратко интересовался идеей встраивания полной поддержки сценариев как ее части. Но в конечном итоге мы решили, что тренинг будет кошмаром.

Независимо от этого, это довольно хорошее введение во встроенный LUA в c #, если вы выберете этот маршрут: http://blog.apterainc.com/software/embedding-lua-and-c/

-121--3926535-

Попробуйте что-то подобное - это работает для упомянутых вами случаев.

select * from tbl
where answer like '%[0-9]%'
and answer not like '%[:]%'
and answer not like '%[A-Z]%'
10
ответ дан 28 November 2019 в 22:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: