是否有一個MySQL內置函數,用反引號圍繞標識符(簡單或合格)?即這樣的功能f
會的工作,如:引用帶反引號的標識符的MySQL函數
f('my')
將返回`my`
,
f('my.table')
將返回`my`.`table`
和
f(`my`)
將返回`my`
是否有一個MySQL內置函數,用反引號圍繞標識符(簡單或合格)?即這樣的功能f
會的工作,如:引用帶反引號的標識符的MySQL函數
f('my')
將返回`my`
,
f('my.table')
將返回`my`.`table`
和
f(`my`)
將返回`my`
通常這是你的數據庫驅動程序的功能,而不是你的數據庫。 MySQL語句解析器使用反引號來正確標記您的語句,因此返回這樣的值的函數將毫無意義,因爲這些將是字符串而不是表或列標記。
您的數據庫驅動程序可能具有用於轉義表名稱的功能,如果有,請使用該功能。否則,你需要以某種方式推出自己的產品。
concat('`',replace(your_identifier,'`','``'),'`')
我沒有使用任何驅動程序。我正在寫一個sql腳本,由mysql客戶端程序運行。反引號是SQL語言的一部分。客戶端可能會也可能不會引用標識符,但我真的不知道MySQL不提供在服務器端執行的功能。 –
我在說這個函數在服務器端沒有用處。如果你在分析之前還沒有定義你的變量,那麼在事實之後,MySQL沒有辦法讓它們理解它們。換句話說,無論你如何工作,SELECT * FROM F('my')'都不是有效的SQL。 – tadman
我明白你的觀點。爲什麼應該在解析器之後調用影響解析器的函數?完全同意。但是,如果您將標識符傳遞給變量,則此類函數「F」仍然有意義。例如。 'SET @ myColumn = F(param); SELECT @myColumn FROM ...'。如果'param'是一個過程參數,並且你不太瞭解它,那麼引用它就非常棘手。 –