是否可以使用LowerCase或UpperCase与Select *

时间:2012-06-10 10:43:42

标签: sql sql-server oracle select sqlite

我在做我正在做的基本查询

Select Lower(column-name) from table

现在,如果我想在多个列上做小写,我需要做一个

Select Lower(col1), Lower(col2) from table

我想知道是否可以在所有列上执行小写函数应用程序。

这样的东西
Select Lower(*) from table

这不是一个有效的陈述,当我尝试使用sqlite3时,我猜它也适用于其他供应商。有没有人能够通过不同的方法做到这一点。可能是PL / SQL或T-SQL。

3 个答案:

答案 0 :(得分:7)

没有。不可能一次性获取小写的所有列。

答案 1 :(得分:2)

我同意,如果不提及每一栏,就没有办法做到这一点。但是,由于您的消费应用程序无论如何都必须遍历所有列和行,我建议无论如何都是转换此数据的正确位置......

答案 2 :(得分:0)

虽然不可能使用内置的sql构造来实现这一点,但是一个小的sql脚本应该可以解决这个问题。请考虑下面给出的脚本:

declare @number_of_columns int
declare @counter int
declare @query nvarchar(max)
declare @column_name nvarchar(max)
set @query = 'select '
set @counter = 1
select @number_of_columns = count(ordinal_position) from information_schema.columns where table_name = '<your table name>'
while(@counter <= @number_of_columns) 
begin
select @column_name = column_name from information_schema.columns
where table_name = '<your table name>' and ordinal_position = @counter
if(@counter < @number_of_columns)
    begin
        Set @query = @query + 'lower(' + (@column_name) + '),'
    end
else
    begin
        Set @query = @query + 'lower(' + (@column_name) + ')'
    end 
set @counter = @counter + 1
end
set @query = @query + ' from <your table name>'
select @query
EXEC sp_executesql @query = @query

虽然上述脚本不能隐式使用'ntext'数据类型,因为它需要显式转换为varchar来应用'lower'函数,对于'int','datetime等数据类型也可能不需要脚本'等等。因此,通过对列的数据类型应用其他条件来修改脚本。