【问题标题】:how to test the length of a value before make a update in oracle sql如何在oracle sql中进行更新之前测试值的长度
【发布时间】:2014-12-09 19:02:34
【问题描述】:

我有一个程序用table 2 的一些值更新table1。我需要检查一个特定字段(年龄)是否超过两位数。

table 2

code name      age
  1  jose       21
  2  peter      36
  3  jhon       50
  4  charlie   021

程序运行时,由于table1的charlie字段的年龄值超过两位数而引发错误。

我需要一个查询来测试更新之前的值;如果年龄字段有 3 位数,则删除第一个并传递 2 位数的值。示例:

code name     age
   3 charlie  021

到:

code name     age
   3 charlie   21

然后再做程序。

我用这个查询来知道字段的长度

SELECT age, LENGTH(TRIM(table2.age)) FROM table2;

age    LENGTH(TRIM(table2.age))
 21     2
 36     2
 50     2
 021    3

【问题讨论】:

  • 总是正确的 2 个字符吗?您可以使用right(age,2)... 100 岁及以上的人呢?我建议将它们存储为整数,这样你就不会遇到这个问题了。
  • 你能显示你的SP吗?那很容易纠正。

标签: sql oracle stored-procedures plsql


【解决方案1】:

您必须使用 SUBSTRING('Sakila', -2) 方法来检索长度 > 2 的最后两位数。

SELECT CASE WHEN length(trim(age))>2 THEN SUBSTRING(age, -2) ELSE age END;

无条件--

从表中选择 SUBSTR(age, -2);

【讨论】:

  • Oracle 中的函数是substr 而不是substring。我不确定CASE 语句有多大作用——为什么不每次都打电话给substr?我怀疑你每次都计算长度而不是总是取最后两个字符来提高效率。
【解决方案2】:

你可以试试这个 ::

SELECT id, to_char(table1.age,'FM90') age FROM table1;  

注意:上述查询仅在 table1.age 左侧附加 0 时有效,例如:

021 或 0021 等等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-05
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 2013-09-14
    • 1970-01-01
    • 2016-06-11
    相关资源
    最近更新 更多