Как Вы извлекаете численное значение из строки в запросе MySQL?

Как только вы начнете менять положение вещей, вы можете просто представить Аляску и Гавайи квадратными прямоугольниками где-нибудь в Мексиканском заливе. Это было бы дополнительным преимуществом, позволяющим узнать, какого цвета были Гавайи.

Вы, вероятно, могли бы тогда просто пройти весь путь и использовать искаженную систему, где каждое государство имеет равную площадь, тогда вы могли бы видеть Род-Айленд.

Примеры картограмм США на изображениях Google показывают такие вещи. Не знаю, сколько из них имеют шейп-файлы или данные вместе с ними.

Вы действительно интересуетесь относительными размерами состояний или хотите, чтобы представление позволяло людям увидеть, какое значение имеет состояние?

16
задан Teflon Ted 10 June 2009 в 21:02
поделиться

3 ответа

Эта функция возвращает только цифры 0–9 из строки, что прекрасно решает вашу проблему, независимо от того, какие префиксы или постфиксы у вас есть.

http : //www.artfulsoftware.com/infotree/queries.php? & bw = 1280 # 815

Скопировано здесь для справки:

SET GLOBAL log_bin_trust_function_creators=1;
DROP FUNCTION IF EXISTS digits;
DELIMITER |
CREATE FUNCTION digits( str CHAR(32) ) RETURNS CHAR(32)
BEGIN
  DECLARE i, len SMALLINT DEFAULT 1;
  DECLARE ret CHAR(32) DEFAULT '';
  DECLARE c CHAR(1);

  IF str IS NULL
  THEN 
    RETURN "";
  END IF;

  SET len = CHAR_LENGTH( str );
  REPEAT
    BEGIN
      SET c = MID( str, i, 1 );
      IF c BETWEEN '0' AND '9' THEN 
        SET ret=CONCAT(ret,c);
      END IF;
      SET i = i + 1;
    END;
  UNTIL i > len END REPEAT;
  RETURN ret;
END |
DELIMITER ;

SELECT digits('$10.00Fr'); 
#returns 1000
35
ответ дан 30 November 2019 в 15:52
поделиться

Это «ужас кодирования», схемы реляционных баз данных не должны НЕ записываться так!

Вам нужно писать сложный и ненужный код для проверки данных.

Попробуйте что-то вроде этого:

SELECT CONCAT('$',(price/1000)) AS Price FROM ...

Кроме того, вы можете использовать float , double или real вместо целого числа.

Если вам нужно хранить данные о валюте, вы можете добавить поле валюты или использовать функции локали системы, чтобы отобразить его в правильном формате.

0
ответ дан 30 November 2019 в 15:52
поделиться

One approach would be to use REPLACE() function:

UPDATE my_table
SET    price = replace(replace(replace(price_display,'Fr',''),'$',''),'.','')
WHERE  price_display not regexp format(price/1000, 2);

This works for the examples data you gave:

'$9.99'
'9.99Fr'

Both result in 999 in my test. With an update like this, it's important to be sure to back up the database first, and be cognizant of the formats of the items. You can see all the "baddies" by doing this query:

SELECT   DISTINCT price_display
FROM     my_table
WHERE    price_display not regexp format(price/1000, 2)
ORDER BY price_display;
5
ответ дан 30 November 2019 в 15:52
поделиться
Другие вопросы по тегам:

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