动态NAV SQL提前时格式转换

时间:2016-08-09 15:35:14

标签: sql sql-server microsoft-dynamics microsoft-dynamics-nav

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

有一个字段以奇怪的格式存储提前期,作为一个新手,我想向我提出更聪明的建议。

后面跟着一个数字,我假设它代表“单位”。

Example data

到目前为止,我得到的字符表示在第2行和第2行使用了天数。在第1行和第1行中使用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;

非常感谢任何更好的解决方案!

1 个答案:

答案 0 :(得分:0)

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

在最后一个字符上使用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;

非常感谢任何更好的解决方案!