Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> проверка на число, не срабатывает
redreem  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 4259
Пользователь №: 29002
На форуме: 5 лет, 4 месяца, 10 дней
Карма: 147




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 та же фигня
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Лысый и злой
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 25994
Пользователь №: 21350
На форуме: 6 лет, 8 месяцев, 26 дней
Карма: 725

Не курю:
1 год, 2 месяца, 13 дней


cast('yandex' as unsigned) - строка

хоть и кажет 0, но при попытке записать в столбец с типом int - валится


--------------------
Халявные ответы кончились.
Если нужен готовый код - готовьтесь заплатить.
Райкин тоже был артист

Возле дома был сарай
А когда всё хорошо
Можно просто покурить

user posted image
http://ufa102.xyz/
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
kaww  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1755
Пользователь №: 20757
На форуме: 6 лет, 10 месяцев, 8 дней
Карма: 184




Цитата (redreem @ 24.03.2016 - 22:06)
почему единичка-то???

По правилам сравнения принятым в mysql. Т.е. в случае с 0 = 'yandex', оба операнда будут приведены к числу, т.е. 0=0
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
redreem  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 4259
Пользователь №: 29002
На форуме: 5 лет, 4 месяца, 10 дней
Карма: 147




Игорь_Vasinsky
kaww

не понятно.
1. вы друг другу противоречите в том, какой тип получится после cast
2. гугл ничего вразумительного про приведение типов при сравнении не сказал. если поменять местами операнды - то ничего не изменится.
3. каким образом проверить, является ли строка представлением целого числа?
4. нафига вообще тогда нужны эти каст и конверт?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
kaww  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1755
Пользователь №: 20757
На форуме: 6 лет, 10 месяцев, 8 дней
Карма: 184




Цитата (redreem @ 25.03.2016 - 07:19)
вы друг другу противоречите

Но один не противоречит докам http://www.mysql.ru/docs/man/Comparison_Operators.html . А конкретно пункт
Цитата
Во всех других случаях аргументы сравниваются как действительные числа с плавающей точкой.
Цитата (redreem @ 25.03.2016 - 07:19)
3. каким образом проверить, является ли строка представлением целого числа?

Вот тут не понял, что проверить?
Цитата (redreem @ 25.03.2016 - 07:19)
4. нафига вообще тогда нужны эти каст и конверт?

Для приведения типов. один из примеров - это твой первый пост, чтобы не гадать как будет сравнивать mysql, а явно привести к нужным типам.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
kaww  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1755
Пользователь №: 20757
На форуме: 6 лет, 10 месяцев, 8 дней
Карма: 184




Цитата (Игорь_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 | |
+----------------------------+-----------------+------+-----+---------+-------+
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
redreem  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 4259
Пользователь №: 29002
На форуме: 5 лет, 4 месяца, 10 дней
Карма: 147




kaww
Цитата
Вот тут не понял, что проверить?


на входе строка, которая может быть представлением числа, т.е. может быть '123', 'qwe'...
мне надо определить, является ли строка представлением числа или нет
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
kaww  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1755
Пользователь №: 20757
На форуме: 6 лет, 10 месяцев, 8 дней
Карма: 184




Цитата (redreem @ 25.03.2016 - 08:21)
мне надо определить, является ли строка представлением числа или нет

Можно регуляркой. Или как-то так:
SELECT CAST('yandex'*1 AS CHAR) = 'yandex' AS is_numeric
PMПисьмо на e-mail пользователю
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Лысый и злой
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 25994
Пользователь №: 21350
На форуме: 6 лет, 8 месяцев, 26 дней
Карма: 725

Не курю:
1 год, 2 месяца, 13 дней


create table foo select cast('yandex' as unsigned);

Data truncation: Truncated incorrect INTEGER value: 'yandex'

мускул 5.6


--------------------
Халявные ответы кончились.
Если нужен готовый код - готовьтесь заплатить.
Райкин тоже был артист

Возле дома был сарай
А когда всё хорошо
Можно просто покурить

user posted image
http://ufa102.xyz/
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
redreem  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 4259
Пользователь №: 29002
На форуме: 5 лет, 4 месяца, 10 дней
Карма: 147




Цитата (kaww @ 25.03.2016 - 13:29)
Цитата (redreem @ 25.03.2016 - 08:21)
мне надо определить, является ли строка представлением числа или нет

Можно регуляркой. Или как-то так:
SELECT CAST('yandex'*1 AS CHAR) = 'yandex' AS is_numeric


ага, работает. пасиб. я пробовал *1 и сравнивать с исходником, но без каст - не работало. надо было видимо скомбинировать.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса