2012-04-27 4 views
6

Почему вложенные ролики не работают в MySQL? (Это делается с помощью SQL Server)Вложенный CAST не работает

select cast(cast(myColumn as decimal(5,2)) as int) from myTable 

SQLFiddle Example

+0

Что вы пытаетесь достичь? Какова цель кастинга как 'UNSIGNED', только тогда для интерпретации полученных данных как подписанного« INT »? Разве это не будет иметь такой же эффект, как прямое выполнение 'CAST (myColumn AS INT)'? – eggyal

+0

@eggyal: Я изменил свой пример.Возникает вопрос: найти целочисленные числа в поле varchar и игнорировать десятичные числа, подобные этому: 'select * from tab, где cast (cast (myColumn as decimal (5,2)) как int) = cast (myColumn as decimal (5,2)) ' –

+0

Для этого вам, вероятно, будет легче протестировать ваши столбцы с помощью [регулярных выражений] (http://dev.mysql.com/doc/refman/5.1/en/regexp.html) , См. [Этот вопрос] (http://stackoverflow.com/questions/75704/how-do-i-check-to-see-if-a-value-is-an-integer-in-mysql) для получения дополнительной информации. – eggyal

ответ

3

По the manual:

CAST(expr AS type) [...]

CONVERT(expr,type) [...]

type может быть одним из следующих значений:

  • BINARY[(N)]

  • CHAR[(N)]

  • DATE

  • DATETIME

  • DECIMAL[(M[,D])]

  • SIGNED [INTEGER]

  • TIME

  • UNSIGNED [INTEGER]

Так, просто следуйте инструкции:

SELECT CAST(CAST(myColumn AS DECIMAL(5,2)) AS SIGNED) FROM myTable 

или

SELECT CAST(CAST(myColumn AS DECIMAL(5,2)) AS UNSIGNED) FROM myTable 
0

Этот запрос работает над концепцией вложенной гипсе.

литых (сумма (литье (column_name целый) + литье (column_name, как целое)), как BIGINT) в качестве оплаты от table_name

Смежные вопросы