0

次のコードがあります

@FiscalMonth  As varchar(MAX) ='[Dim Date].[Fiscal].[Fiscal Month Number].&[10]&[2014]&[4]&[1]'

私の場合、月は になります10。次のコードを試しました

SET @FiscalMonthNumber = cast(substring(right(@FiscalMonth,18),1,2) as nvarchar(max))

上記のコードは正常に動作しますが、

@FiscalMonth  As varchar(MAX) ='[Dim Date].[Fiscal].[Fiscal Month Number].&[10]&[2014]&[11]&[1]'

0]私は間違っている結果を持って います。

4

3 に答える 3

2

うーん。'[n'これは、 (wherenは任意の数字で、文字列の最初の 8000 文字以内で発生します) のようなパターンに初めて遭遇したとき、それが月であると想定しています。

DECLARE @fm VARCHAR(MAX);
SET @fm = '[Dim Date].[Fiscal].[Fiscal Month Number].&[10]&[2014]&[4]&[1]';

SELECT SUBSTRING(@fm, PATINDEX('%[[][0-9]%', @fm) + 1, 
  CHARINDEX(']', SUBSTRING(@fm, PATINDEX('%[[][0-9]%', @fm) + 1, 8000)) - 1);

結果:

----------
10

他に考えられるパターンや特殊なケースがある場合は、それらを知らせてください。

SQLfiddle デモ

于 2013-10-02T20:07:40.237 に答える
0

または、文字列からすべての数字を抽出してから、数字の文字列から月の数字を抽出することもできます。このようなもの

DECLARE @FiscalMonth1 As varchar(MAX) ='[Dim Date].[Fiscal].[Fiscal Month Number].&[10]&[2014]&[4]&[1]'

WHILE PATINDEX('%[^0-9]%',@FiscalMonth1) <> 0

SET @FiscalMonth1 = STUFF(@FiscalMonth1,PATINDEX('%[^0-9]%',@FiscalMonth1),1,'')

SELECT LEFT(@FiscalMonth1, 2)

于 2013-10-02T20:33:10.533 に答える
0

コードを確認しましたが、正常に動作しており、両方のケースで 10 が表示されているため、ロジックを調べる必要があるかもしれません。

DECLARE @FiscalMonth varchar(MAX) ='[Dim Date].[Fiscal].[Fiscal Month Number].&[10]&[2014]&[4]&[1]'

DECLARE @FiscalMonthNumber nvarchar(max) = cast(substring(right(@FiscalMonth,18),1,2) as nvarchar(max))

SELECT @会計月番号

DECLARE @FiscalMonth1 As varchar(MAX) ='[Dim Date].[Fiscal].[Fiscal Month Number].&[10]&[2014]&[4]&[1]'

DECLARE @FiscalMonthNumber1 AS nvarchar(max) = cast(substring(right(@FiscalMonth,18),1,2) as nvarchar(max))

@FiscalMonthNumber1 を選択

于 2013-10-02T20:10:05.797 に答える