MySQL의 IF() 함수에 관한 문제가 있습니다.MySQL에서해야 할 두 가지 사항 IF()
문자열을 반환하고 변수 값을 변경하고 싶습니다. Somwhat 등 :
IF(@firstRow=1, "Dear" AND @firstRow:=0, "dear")
에만 출력 '0'대신에 '친애하는'의 ...
을 나는이 문제를 해결할 수있는 방법에 대한 몇 가지 입력을위한 매우 감사 할 것입니다!
루이 :
MySQL의 IF() 함수에 관한 문제가 있습니다.MySQL에서해야 할 두 가지 사항 IF()
문자열을 반환하고 변수 값을 변경하고 싶습니다. Somwhat 등 :
IF(@firstRow=1, "Dear" AND @firstRow:=0, "dear")
에만 출력 '0'대신에 '친애하는'의 ...
을 나는이 문제를 해결할 수있는 방법에 대한 몇 가지 입력을위한 매우 감사 할 것입니다!
루이 :
AND
는 부울 연산자가 아닌 "이 다른 일을"연산자입니다.
"Dear" AND 0
은 0을 false
으로 처리하고 <anything> AND false
을 false
으로 반환하므로 0을 반환합니다.
"Dear"
의 정수/부울 값도 0이기도합니다. 숫자 컨텍스트에서 문자열을 사용하면 문자열의 초기 숫자 만 읽으며 나머지는 무시합니다.
문제가 무엇인지는 명확하지 않지만 행이 결과 집합의 첫 번째 단어 인 경우 "소중한 단어"를 대문자로 표시하려고합니다. 대신 표현식에 부작용을 맞추려고 반으로 너무 영리한되는
는, 자신에게 부탁을하고 별도의 컬럼으로 그것을 깰 :
mysql> SELECT IF(@firstRow=1, 'Dear', 'dear'), @firstRow:=0 AS _ignoreThis
-> FROM (SELECT @firstRow:=1) AS _init
-> CROSS JOIN
-> mytable;
+---------------------------------+-------------+
| IF(@firstRow=1, 'Dear', 'dear') | _ignoreThis |
+---------------------------------+-------------+
| Dear | 0 |
| dear | 0 |
| dear | 0 |
+---------------------------------+-------------+
하지만 당신은 정말 당신을 만들고 싶어 가능한 한 혼란을 읽을 수 코드, 당신은 같은 것을 할 수 있습니다
SELECT IF(@firstRow=1, CONCAT('Dear', IF(@firstRow:=0, '', '')), 'dear')
FROM (SELECT @firstRow:=1) AS _init
CROSS JOIN
...
하지만 코드의 품질이 중요한 메트릭 기억 분 당 WTFs합니다. 구문 예에 따라 훨씬 쉽게로
대신 IF()의 case expression
를 사용
select
case when @firstRow = 1 then 'Dear' else 'dear' end AS Salutation
, @firstRow := 0
from (
select 1 n union all
select 2 n union all
select 3
) d
cross join (SELECT @firstRow:=1) var
+---+------------+----------------+
| | Salutation | @firstRow := 0 |
+---+------------+----------------+
| 1 | Dear | 0 |
| 2 | dear | 0 |
| 3 | dear | 0 |
+---+------------+----------------+
나는 그것이 그 깨끗한 아니라고 알고 있지만 첫 번째 버전은 어떤 이유로 작동하지 않습니다, 나는 이미 ... 두 번째 버전 ^^ 감사하지만 잘 작동 것을 시도했다! :) – siuol
@시오 울, 나는 첫 번째 쿼리를 테스트하고 잘 작동합니다. 위 참조, 내가 테스트 한 것을 붙여 넣었습니다. –