【问题标题】:How to find any lower case data/field in all columns of a table (tsql)如何在表的所有列中查找任何小写数据/字段(tsql)
【发布时间】:2018-03-18 11:26:39
【问题描述】:

我有一个大约 10 列的表,包含大约 5000 行数据。我想弄清楚是否任何列的任何字段都以小写形式填充,然后我需要修复它。因为,对于 ETL 过程,我需要所有列都为大写。

我想如果有一个查询可以将所有字母数字列或任何大写列都转换为大写形式。但我也很想知道如何在整个表中找到所有列的小写字段,以便知道需要更改的内容。

以此为例表

表:学生;

列:f_name、l_name、id、address、city、state、zipcode

【问题讨论】:

  • 既然你说所有的列都必须是大写的,那为什么不避免费心去寻找那些小写a)UPDATESET他们都到Column = UPPER(Column)或b)SELECT他们都是UPPER(Column) "Column"?
  • stackoverflow.com/questions/858528/… 看看这个,它显示了一个临时和永久的解决方案。
  • 哦,哎呀,看起来@justiceorjustus 为您提供了解决方案。
  • @Simon 你怎么敢用和我一样的基本逻辑!
  • “因为,对于 ETL 过程,我需要所有列都为大写。”为什么?您使用的 ETL 工具在 ETL 过程中无法处理吗?看来您正在寻找应该在 ETL 中处理的问题的解决方案

标签: sql tsql ssms


【解决方案1】:

使用UPPER函数,您可以将小写字符数据转换为大写的字符表达式。在这种情况下,下面的 SQL 应该可以工作。

UPDATE Table SET ColumnName = UPPER (ColumnName)

要检查,请使用以下 SQL:

SELECT * FROM Table WHERE UPPER(ColumnName) != ColumnName
COLLATE Latin1_General_CS_AS

【讨论】:

  • 这不会从我的表中提取数据。字段中的值是字母数字或其他内容。我不得不使用这个:select f_name from student WHERE f_name collat​​e Latin1_General_CS_AI Upper (f_name)
  • 完美,您的解决方案可用于查找值。现在我将尝试更新这些并查看。
  • 另外,我能够更新正确的字段。所以,谢谢!
【解决方案2】:

您可以对您想要的每一列进行此查询,我建议您一一进行以避免任何意外错误:

UPDATE table_name SET column_name = UPPER(column_name)

【讨论】:

  • 它不会工作。我认为需要在某个地方整理一些东西?
  • 您遇到了什么问题?鉴于您的示例,它应该只是:update student set f_name = upper(f_name)
  • @Saihl 你没有权限什么的吗?正如西蒙所写,这应该是一个简单的修复。
  • 不,我确实有权进行更新。但在我更新之前,我什至想看看它会更新什么。所以,如果我选择 * from student where student_fname Upper (Student_fname) 它不会显示那些真正有小写学生名字的值。
  • 更新查询是正确的,但 Madhukar 和justorjustus 已经提到了提取需要更改的数据
【解决方案3】:

OP 提到他想在更改之前查看更改。这将创建一个显示更改的临时表,然后回滚 UPDATE 查询。

BEGIN TRAN

DECLARE @Changes TABLE (
    OLD_f_name VARCHAR(MAX)
    ,NEW_f_name VARCHAR(MAX)
    )

UPDATE Student
SET f_name = UPPER(f_name)
OUTPUT deleted.f_name
    ,inserted.f_name
INTO @Changes(OLD_f_name, NEW_f_name);

SELECT * FROM @Changes

ROLLBACK TRAN

要实际进行更新,请使用COMMIT TRAN 而不是ROLLBACK TRAN

【讨论】:

  • 其实我发现这是诚实地带回价值。如果此解决方案有误,请发表评论。 select f_name from student WHERE f_name collat​​e Latin1_General_CS_AI Upper (f_name)
  • 另外,这只是一个示例列。我拥有的数据有字母数字数据。但无论它有小写,我想更新那些。
  • @Saihl 这会预览更改,而无需使用ROLLBACK TRAN 实际进行更改。要实际进行更改,请使用COMMIT TRAN
猜你喜欢
  • 1970-01-01
  • 2016-05-31
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 2011-02-13
  • 2012-08-19
  • 2020-07-24
  • 1970-01-01
相关资源
最近更新 更多