redreem
25.03.2016 - 02:06
SELECT
cast('yandex' as char),
cast('yandex' as unsigned),
case when cast('yandex' as unsigned) = cast('yandex' as char) then 1 else 0 end,
case when md5(cast('yandex' as unsigned)) = md5(cast('yandex' as char)) then 1 else 0 end
from dual;
результат:
yandex 0 1 0
почему единичка-то???
c convert та же фигня
Игорь_Vasinsky
25.03.2016 - 06:40
cast('yandex' as unsigned) - строка
хоть и кажет 0, но при попытке записать в столбец с типом int - валится
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Цитата (redreem @ 24.03.2016 - 22:06) |
почему единичка-то??? |
По правилам сравнения принятым в mysql. Т.е. в случае с 0 = 'yandex', оба операнда будут приведены к числу, т.е. 0=0
redreem
25.03.2016 - 11:19
Игорь_Vasinsky
kaww
не понятно.
1. вы друг другу противоречите в том, какой тип получится после cast
2. гугл ничего вразумительного про приведение типов при сравнении не сказал. если поменять местами операнды - то ничего не изменится.
3. каким образом проверить, является ли строка представлением целого числа?
4. нафига вообще тогда нужны эти каст и конверт?
Цитата (redreem @ 25.03.2016 - 07:19) |
вы друг другу противоречите |
Цитата |
Во всех других случаях аргументы сравниваются как действительные числа с плавающей точкой. |
Цитата (redreem @ 25.03.2016 - 07:19) |
3. каким образом проверить, является ли строка представлением целого числа? |
Вот тут не понял, что проверить?
Цитата (redreem @ 25.03.2016 - 07:19) |
4. нафига вообще тогда нужны эти каст и конверт? |
Для приведения типов. один из примеров - это твой первый пост, чтобы не гадать как будет сравнивать mysql, а явно привести к нужным типам.
Цитата (Игорь_Vasinsky @ 25.03.2016 - 02:40) |
cast('yandex' as unsigned) - строка |
mysql с тобой не согласен:
create temporary table _test select cast('yandex' as unsigned);
desc _test;
drop temporary table if exists _test;
Результат:
+----------------------------+-----------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------------------+-----------------+------+-----+---------+-------+
| cast('yandex' as unsigned) | int(6) unsigned | NO | | 0 | |
+----------------------------+-----------------+------+-----+---------+-------+
redreem
25.03.2016 - 12:21
kaww
Цитата |
Вот тут не понял, что проверить? |
на входе строка, которая может быть представлением числа, т.е. может быть '123', 'qwe'...
мне надо определить, является ли строка представлением числа или нет
Цитата (redreem @ 25.03.2016 - 08:21) |
мне надо определить, является ли строка представлением числа или нет |
Можно регуляркой. Или как-то так:
SELECT CAST('yandex'*1 AS CHAR) = 'yandex' AS is_numeric
Игорь_Vasinsky
25.03.2016 - 12:37
create table foo select cast('yandex' as unsigned);
Data truncation: Truncated incorrect INTEGER value: 'yandex'мускул 5.6
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
redreem
25.03.2016 - 13:37
Цитата (kaww @ 25.03.2016 - 13:29) |
Цитата (redreem @ 25.03.2016 - 08:21) | мне надо определить, является ли строка представлением числа или нет |
Можно регуляркой. Или как-то так: SELECT CAST('yandex'*1 AS CHAR) = 'yandex' AS is_numeric |
ага, работает. пасиб. я пробовал *1 и сравнивать с исходником, но без каст - не работало. надо было видимо скомбинировать.
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.