【问题标题】:How to check value of a VARCHAR(50) columns in SQL如何在 SQL 中检查 VARCHAR(50) 列的值
【发布时间】:2013-08-12 14:45:10
【问题描述】:

我是 sql 的新手,需要帮助构建我正在处理的这个存储过程。我通过存储过程传递的值之一是 ClassCodeGroup,有时它小于 10。如何检查它是否在 sql 中小于 10? 如果它小于 10 (1-9),那么我想添加一个前导 0,我认为应该是这样的。

select RIGHT('0' + convert (varchar(50), @ClassCodeGroup),2) 

任何帮助将不胜感激!谢谢

【问题讨论】:

标签: mysql .net sql vb.net stored-procedures


【解决方案1】:

一个简单的方法是

select RIGHT(CAST(,1000+@ClassCodeGroup AS char(8)),2) 

这样您就不必检查@ClassCodeGroup 的长度,因为您只需转换带有前导零的数字并且只考虑最后两位数字。只是将其更改为 CAST,因为我不确定 CONVERT 语法...

【讨论】:

  • 你能告诉我什么是 ,1000+@ClassCodeGroup 吗?
  • @HereToLearn_ 我添加 1000(或另一个大数),其中至少有 2 个零(实际上 100 就足够了),所以我总是会得到一个前导零或@ClassCodeGroup 的 2 位数字。它甚至在 @ClassCodeGroup 为零时也有效。
【解决方案2】:

我是 sql 新手,需要帮助构建这个存储过程 如何在 sql 中检查它是否小于 10

您可以在存储过程和触发器中使用IF .. THEN .. ELSE .. END IF

IF @ClassCodeGroup < 10
THEN
  -- do something
ELSE
  -- do other thing
END IF;

如果它小于 10 (1-9),那么我想添加一个前导 0

但是,对于 特定情况,MySQL 提供了 LPAD 函数来完全做到这一点:

SELECT LPAD(@ClassCodeGroup, 2, '0')

请注意,大于 99 的值会被截断。


最后,回到您最初的问题,您可以使用functional IF

SELECT IF(@ClassCodeGroup>10, 
          @ClassCodeGroup, 
          CONCAT('0',@ClassCodeGroup)
         )

在这里,我使用了CONCAT 函数,以便在小于 10 的值前面加上前导“0”。请注意,在此版本中,大于或等于 10 的值将保持不变

【讨论】:

    猜你喜欢
    • 2022-09-26
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    • 2018-10-12
    相关资源
    最近更新 更多