【问题标题】:Formatting in SQLSQL中的格式化
【发布时间】:2016-08-24 07:44:04
【问题描述】:

您好,我有一个访问查询(如下),我试图在 SQL Server 中重新创建:

UPDATE tblProducts SET tblProducts.ProductCode = [tblProducts].[ProductPrefix] & 
Format([tblProducts].[ProductID],"00000")
WHERE (((tblProducts.ProductCode) Is Null Or (tblProducts.ProductCode) <>[tblProducts].[ProductPrefix] & 
Format([tblProducts].[ProductID],"00000")));

我在使用 FORMAT 函数时遇到问题。

【问题讨论】:

  • SQL-Server 还是 Access?
  • 您面临的困难是什么?有任何错误信息吗?
  • 对不起,我发布的查询是访问查询,我正在尝试在 SQL 中重新创建它
  • 我得到“格式”不是可识别的内置函数名称

标签: sql sql-server ms-access


【解决方案1】:

这是一种格式化方法:

UPDATE tblProducts 
    SET ProductCode = [ProductPrefix] +
                      RIGHT('00000' + CAST(COALESCE(ProductId, 0) as VARCHAR(255)), 5)
WHERE ProductCode Is Null OR
      ProductCode <> [ProductPrefix] + RIGHT('00000' + CAST(ProductId as VARCHAR(255)), 5);

实际上,为了防止出现问题,我将其表述为:

WITH toupdate AS (
      SELECT p.*,
             ([ProductPrefix] +
               RIGHT('00000' + CAST(COALESCE(ProductId, 0) as VARCHAR(255)), 5)
             ) as new_ProductCode
      FROM tblProducts p
     )
UPDATE toupdate
    SET  ProductCode = new_ProductCode
    WHERE ProductCode Is Null OR
          ProductCode <> new_ProductCode;

【讨论】:

    【解决方案2】:

    对于 SQL Server 2012 及更高版本,您可以使用:

    UPDATE tblProducts 
    SET ProductCode = [ProductPrefix] + Format([ProductID],'00000')
    WHERE ProductCode IS NULL OR ProductCode != [ProductPrefix] + Format([ProductID],'00000');
    

    STUFF 的另一种方式(SQL Server(从 2008 年开始)):

    UPDATE tblProducts 
    SET ProductCode = [ProductPrefix] + STUFF('00000' + CAST(ProductID as nvarchar(10)),1,LEN(ProductID),'')
    WHERE ProductCode IS NULL OR 
        ProductCode != [ProductPrefix] + STUFF('00000' + CAST(ProductID as nvarchar(10)),1,LEN(ProductID),'')
    

    【讨论】:

    • 太棒了,我试图在 SQL Server 2008 上使用 FORMAT()。谢谢!
    【解决方案3】:

    用这个代替format([tblProducts].[ProductID], "00000")

    right('00000'+cast([tblProducts].[ProductID] as varchar(5)),5)
    

    【讨论】:

      猜你喜欢
      • 2020-06-06
      • 2019-11-18
      • 2021-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-28
      相关资源
      最近更新 更多