1

我在从 Microsoft Dynamics NAV 复制的表中获取数据(特别是一个字段)时遇到了一个小问题。

有一个字段以奇怪的格式存储提前期,作为一个新手,我想更聪明地向我征求意见。

有一个数字后跟一个字符,我假设它表示“单位”。

示例数据

到目前为止,我得到的是第 2 行和第 4 行中使用了表示天数的字符,第 1 行和第 3 行使用了一个数周的字符

有人能说这是存储此类数据的某种“标准”方式吗?

告诉我如何将这些转换为天数或为我指明正确的方向?

我相信我找到了解决方案,但它似乎非常难看!

解决方案

SELECT
  [ItmCode] AS [ItemCode],
  [ItmDesc] AS [ItemDesc],
  [ItmLead] AS [LeadTime_Orginal],
  CASE WHEN ISNULL(ItmLead, '') ='' THEN 0 ELSE CHOOSE(ASCII(RIGHT(ItmLead, 1)), 0,1,0,7,0,0,0,0,0,0,0,0,0,0,0) * CAST(LEFT(ItmLead, LEN(ItmLead)-1) AS int) AS [LeadTimeInDays],
FROM dbo.nav_items;

任何更好的解决方案将不胜感激!

4

1 回答 1

1

我相信我找到了解决方案,但它似乎非常难看!

在最后一个字符上额外使用 SQL ASCII 后,它返回数字 2 和 4,然后我使用 CHOOSE 将这些值分配给数字 1 和 7。

有了这些,我可以将它乘以该领域的第一部分并实现我的目标。

解决方案

SELECT
  [ItmCode] AS [ItemCode],
  [ItmDesc] AS [ItemDesc],
  [ItmLead] AS [LeadTime_Orginal],
  CASE WHEN ISNULL(ItmLead, '') ='' 
  THEN 0 
  ELSE CHOOSE(ASCII(RIGHT(ItmLead, 1)), 0,1,0,7,0,0) * CAST(LEFT(ItmLead, LEN(ItmLead)-1) AS int) AS [LeadTimeInDays],
FROM dbo.nav_items;

任何更好的解决方案将不胜感激!

于 2016-08-09T16:58:49.553 回答