更改字符串中的 2 个值

Change 2 values in a string

我将以下字符串 2014/15 作为参数传递给我的过程,我需要将 45 递增 1 所以我最终得到2015/16.

显然字符串是 VARCHAR 所以我不能使用任何正常的算术函数,也不能使用 DATEADD。参数必须按原样传入,我必须推导一年以上和以下一年以及使用参数。

为简化起见,如果您输入 2014/15,那么在我的 SP 中,我将需要在各个部分或 SP 全部使用 2013/142014/152015/16从那 1 个字符串派生。

在这里,这可能对你有帮助:

DECLARE @Input varchar(10)
SET @Input = '2014/15'
DECLARE @First INT, @Second INT
SET @First = SUBSTRING(@Input, 1, CHARINDEX('/', @Input) - 1)
SET @Second = SUBSTRING(@Input, CHARINDEX('/', @Input) + 1, LEN(@Input))
SELECT CONVERT(VARCHAR(10), (@First + 1)) + '/' + CONVERT(VARCHAR(10), (@Second + 1))

基本上它将由正斜杠字符 / 分隔的两个组件拉入 INT 变量,您可以根据需要递增或递减这些变量,然后将这些结果值转换回 VARCHAR 并将其与分隔符放回一起。

你可以做的是:

DECLARE @date VARCHAR(MAX)
SET @date = '2014/15'

SELECT 
    CAST(
        CAST(
            SUBSTRING(@date, 0, CHARINDEX('/', @date)) 
        AS INTEGER) + 1 
    AS VARCHAR(4))
    + '/' 
    + RIGHT(
      CAST(
          CAST(
              SUBSTRING(@date, 0, CHARINDEX('/', @date)) 
          AS INTEGER) + 2
      AS VARCHAR(4))
  , 2)

这里是 SQLFiddle 代码的工作原理。

查询的第一部分将return年份2014递增1。

然后它会附加一个斜杠。再次使用以相同方式提取的第一个日期 (2014),我将其递增 2。然后我将此值转换为 VARCHAR 值,以便我可以对其执行字符串操作(RIGHT() 函数)。

然后我使用 RIGHT() 函数提取最后 2 个字符,并将其附加到我的原始字符串中。

我想到了以下但不是特别优雅

SUBSTRING(@Date, 1, 3)+CAST(CAST(SUBSTRING(@Date, 4,1)AS INT)+1 AS VARCHAR)+'/'+SUBSTRING(@Date, 6, 1)+CAST(CAST(SUBSTRING(@Date, 7,1)AS INT)+1 AS VARCHAR)

以下使用记录的隐式类型转换 (Ref.) 将子字符串转换为整数。请注意,它不使用 CharIndex 来定位斜线(“/”),但 假定 该列具有您指定的格式:四位数字、斜线、两位数.

declare @Sample as Char(7) = '2014/15';
select Cast( Left( @Sample, 4 ) + 1 as Char(4) ) + '/' +
  Cast( Right( @Sample, 2 ) + 1 as Char(2) );