触发器中数字的格式

时间:2017-11-06 07:55:48

标签: sql-server

我有一个触发器,每次插入一条记录时,它会增加一个数字。 触发器适用于普通数字,但是我需要将数字设置为:Q1500/11/2017(11表示月份,2017年是年份,它将根据月份和年份滚动。)

Q1500每次都会增加,因此从Q1500开始,它将进入Q1501 / 11/2017,Q1502 / 11/2017,并继续。

我试过这个:

SELECT
    Quote_No = 'Q' + '/' + CONVERT(VARCHAR(255), CONVERT(INT, Quote_No) + 1) + '/' + 
    RIGHT(CONVERT(VARCHAR(10), GETDATE(), 103), 7) 
FROM
    Quote_Pref_No 
WHERE
    ID = 1

以上返回空值。

表Quote_Pref_no是:

CREATE TABLE [dbo].[Quote_Pref_no]
(
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Quote_No] [nvarchar](50) NULL DEFAULT ('Q1500'),
    [Mth] [nvarchar](3) Null,
    [Year] [nvarchar](4) Null
) ON [PRIMARY]

如何设置数字以返回正确的格式并逐一递增引用?

2 个答案:

答案 0 :(得分:0)

select Quote_No = 'Q' + '/' + CAST(CAST(SUBSTRING(Quote_No,2,LEN(Quote_No)) AS BIGINT)+ 1 AS VARCHAR(50)) + '/' + MONTH(GETDATE())+YEAR(GETDATE()) from Quote_Pref_No where ID = 1

答案 1 :(得分:0)

试试这个:

DECLARE @Quote_No nvarchar(50)='Q1500'
DECLARE @i INT=1

WHILE(@i<=10)
BEGIN

   IF(CHARINDEX('/',@Quote_No)!=0)
   BEGIN
     SELECT @Quote_No = LEFT(@Quote_No, CHARINDEX('/',@Quote_No)-1)
   END

   SELECT @Quote_No = 'Q'+CONVERT(VARCHAR(10),CONVERT(INT,RIGHT(@Quote_No,LEN(@Quote_No)-1))+1)+'/'+CONVERT(VARCHAR(10),MONTH(GETDATE()))+'/'+CONVERT(VARCHAR(10),YEAR(GETDATE())) 

   SELECT @Quote_No

   SET @i=@i+1
END