I'd like to add serial number based on every 5 records. There are some columns in my table: flag, seq_no and page_no.
If seq_no is equal to 1,2,3,4,5, page_no would be updated and set to 1.
If seq_no is equal to 6,7,8,9,10, page_no would be updated and set to 2, and so on.
I'm using SQL Server 2000.
My code as below but wrong:
--set page_no
Declare #page_number int
Declare #i int, #k int
set #i = 1
set #k = 1
while #k <= 5
begin
update dbo.test
set #page_number = page_no = case
when #k = 5 then (#i + 1)
else #i
end
where flag = 'right'
set #k = #k + 1
end
How can I do so? Please help me and so much thanks.
You could try something like:
UPDATE dbo.test
SET page_no = ((seq_no - 1) / 5) + 1
This will set the value of page_no to the value you want based on the value of seq_no.
I have declared this sequence:
CREATE SEQUENCE [dbo].[Monitor_Seq]
AS [int]
START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 2147483647
CACHE
GO
and I use it like this:
declare #y int
declare #i int
select #y = 1
while #y < 100 begin
SELECT #i = NEXT VALUE FOR Monitor_Seq;
PRINT CAST ( #I AS VARCHAR)
-- use #i here
select #y = #y + 1
end /*while*/
the question is:
where it says in the code:
-- use #i here
suppose I decide not to carry on with a particular number, how can I revert it back my sequence?
Let's say when I get the NEXT VALUE = 10
situation made me NOT to carry on with the number 10.
I want that on the next time I get the
SELECT #i = NEXT VALUE FOR Monitor_Seq;
I want to get #i = 10 again.
is this possible?
You can restart a sequence:
ALTER SEQUENCE Monitor_Seq RESTART WITH 10;
I need to create a random string of digits of given length
CREATE FUNCTION UniqConvert
(#calue as varchar(max),
#len as int)
The output should be of the length #len
and should be unique per input #value
I already asked similar question:
Create random string of digits T-SQL
This one has different concept
declare #len int
set #len = 3
DECLARE #Random INT
DECLARE #Upper INT
DECLARE #Lower INT
SET #Lower = power(10,#Len-1) ---- The lowest random number
SET #Upper = power(10,#Len )-1 ---- The highest random number
SELECT #Random = ROUND(((#Upper - #Lower -1) * RAND() + #Lower), 0)
select #Random
Try this
select Cast(Round(Rand()*power(10,#Len),0) as Varchar(30))
i'm pretty new to SQL and stored procedures and i'm a bit stuck - so any help would be appreciated
how do i loop through each row and assign it the random value i'm generating?
Here is my Storedproc:
CREATE PROCEDURE StoredProc8
AS
BEGIN
DECLARE #total INT
DECLARE #Count INT = 0
DECLARE #Random INT = 0
SELECT #total = COUNT(CustomerID) FROM Customers
WHILE(#Count<= #total)
BEGIN
SELECT #Random = 2 * RAND()
EXEC ('update Customers set col1= ' + #Random )
SELECT #Count = #Count+1
END
END
If you simple need to assign 0 or 1 randomly - you can use RAND() with random seed:
UPDATE Customers SET COL1 = RAND(CHECKSUM(NEWID()))*2
Demo: http://sqlfiddle.com/#!3/31699/9
suppose I have a number 62. This is composed of 2 digits
How can add 2 digit together divide by 10 and if result = something like 6.2 just take reminder
declare #Number int,#Result int
set #Number =62
if len(#Number) > 1
set #Result=????=--Add 6 and 2 =8
set #result=#result % 10 --Mod operator
print #result
-- the result should be 2 in this case
what Am I doing wrong?
Thanks a lot
set #tens = floor(#Number / 10);
set #ones = #number - #tens;
set #Result = #tens + #ones;
Or use left and right to access substrings.
I have no way to try it:
DECLARE #Number VARCHAR(2)
SET #Number = '62'
declare #firstNum INT, #secondNum INT
SET #firstNum = CAST(SUBSTRING(#Number, 1, 1) AS INT)
SET #secondNum = CAST(SUBSTRING(#Number, 2, 1) AS INT)
DECLARE #Result int
SET #Result = (#firstNum + #secondNum) % 10
I think #Number % 10is what you are looking for. It returns the last digit of any number. 62 -> 2, 97 -> 7, etc...
Update:
I may have misunderstood the question. Maybe you want 10 % ((#Number / 10) + #Number) instead.
(#Number / 10) + #Number is the sum of the digits of a two-digit number.
If the number is always two digits, then I would use LEFT(#Number,1) and RIGHT(#Number,1) to access each digit. If it's not, comment back and I'll give you some help with the loop you'll need.
More pressing an issue is that you're expecting 2, but the result of 8 mod 10 is 8. If you're looking for 2, the sum is 10 mod 8 (10 % #Result).
In any case, hit me back if this doesn't answer exactly what you wanted.
Try this
declare #myNumber float,#result float
set #myNumber = 62
select
#result = (case when len(#myNumber) = 1 then #myNumber
else (#myNumber /10) + cast(#myNumber as int) % 10 end)
select [Output] = STUFF(
cast(#result as varchar(50))
,1
,charindex('.',cast(#result as varchar(50)))
,'')
Output
2
Hope this helps
And if u just want to add 2 numbers try this(though it has been implemented above)
declare #myNumber int,#result int
set #myNumber = 62
select
Result = (case when len(#myNumber) = 1 then #myNumber
else (#myNumber /10) + #myNumber % 10 end)
Result
8
So I guess you want something like this - parse the string representing your number, adding up the individual digits as integer values. This gives you a total result at the end - then you do whatever you need to do with that. This code works for any length of string (up to 50 characters = 50 digits in your original number):
DECLARE #Number INT
SET #Number = 62
DECLARE #NumString VARCHAR(50)
SET #NumString = CAST(#Number AS VARCHAR(50))
DECLARE #Index INT
SET #Index = 1
DECLARE #Sum INT
SET #Sum = 0
WHILE #Index <= LEN(#NumString)
BEGIN
SET #Sum = #Sum + CAST(SUBSTRING(#NumString, #Index, 1) AS INT)
SET #Index = #Index + 1
END
SELECT #Sum AS 'Sum of all digits'
With the initial value of "62" for #Number, I get a result of 8 - now you can continue on using that value.
If you need this function often, I would probably encapsulate it into a user-defined function so you can call it from everywhere in your code.