MYSQL if (строка в (0) ) возвращает TRUE

#mysql

#mysql

Вопрос:

Следующий результат запроса mysql возвращает 'TRUE' ,

 select if('testString' in ( 0 ), 'TRUE', 'FALSE') from sampleTable 
  

Кто-нибудь может объяснить, почему, пожалуйста?

Комментарии:

1. Это связано с правилами кастинга MySQL. Обратите внимание, что 'testString' IN ('0') то, что вы должны были написать, на самом деле является false .

2. Какие значения testString имеет?

3.@vivek_23 'testString' является значением.

4. @TimBiegeleisen Тогда почему OP написал from sampleTable ?

5. Потому что запрос плохой и не имеет смысла.

Ответ №1:

Вы можете попробовать использовать

  select  cast('testString' AS UNSIGNED)  from dual ;  // return 0 
  

сделайте факт, потому что приведение для ‘testString’ КАК НЕПОДПИСАННОГО равно = 0

затем

 select if( 'testString' in ( 0 ), 'TRUE', 'FALSE') from DUAL ;
  

сопоставьте для приведенного значения 0 в (0) и верните TRUE

Комментарии:

1. В идеале в вашем ответе также должно быть указано, что сравнение строк с целыми числами не имеет смысла, и фактически в большинстве других баз данных запрос OP даже не будет компилироваться.