Jag har ett datumt.ex 891031 som jag skulle vilja spara som 311089 hur skriver man för att kasta om en sträng? REVERSE(...) ger väl 130198, dvs en "baklängessträng"? what the heck... just for the fun... Eller.. Tack för era svar: Tilldela MAX() till en variabel först, sen kan du använda den i SET Ola jag får ingen träff i tabellen. med @parmLicNbr + '%' Om man då får fram t.ex M180360GER03 från SUBSTRING(@parmMaxLicNbr,1,10) + SUBSTRING(@parmMaxLicNbr,11,2) Du måste göra en cast på det sista uttrycket, såhär: Kan hålla med där, men det är en konvertering fr ett gammalt system. Och dom har beslutat att ha det kvar.MSSQL 2005 kasta om en sträng.
Sv:MSSQL 2005 kasta om en sträng.
Borde inte SUBSTRING(...) vara bättre, ex:
<info>
SUBSTRING('891031',5,2) + SUBSTRING('891031',3,2) + SUBSTRING('891031',1,2)
</info>Sv: MSSQL 2005 kasta om en sträng.
The more (ways to do it) the merrier. :-)
<code>
SELECT RIGHT('891031', 2) + SUBSTRING('891031',3,2) + LEFT('891031', 2);
SELECT REPLACE(CONVERT(varchar(8), CAST('891031' AS datetime), 105), '-', '');
</code>Sv:MSSQL 2005 kasta om en sträng.
SELECT REPLACE(convert(varchar(8),convert(smalldatetime, '891031', 1),4),'.','')
(snarlikt Håkans 2:a förslag, men sparar två tecken på att inte konvertera med sekelsiffror samt sparar 4 bytes på smalldatetime.. )
Men Right .. Substring .. Left är ju lite lättare att läsa .. och antagligen snabbare... Sv: MSSQL 2005 kasta om en sträng.
Jag håller på med en sp som skall skapa ett ID med LicNbr baserat på om Det är en Man 'M' kvinna 'K'
födelseår t.ex '89-10-31' Sedan FirstName
Det blev såhär:SET @parmLicNbr = @parmMaleFemale +SUBSTRING(@parmAge,7,2) + SUBSTRING(@parmAge,4,2) + SUBSTRING(@parmAge,1,2) + UPPER(SubString(@parmFirstName,1,3))
Vad jag sedan skall lägga på är ett löpnummer 01,02,osv baserat på vad som redan finns i den aktuella tabellen bo_Licence.
Och sedan skapa en ny post utifrån LicNbr, jag söker rätt på det LicNbr som är störst genom,
SELECT MAX(LicNbr) AS ValLicNbr FROM bo_Licence WHERE LicNbr Like @parmLicNbr + '%'
Men jag får felmeddelande när jag skviver
SET @parmLicNbr = @parmLicNbr + MAX(LicNbr) + 1;
Invalid column name, har även provat att skriva MAX(ValLicNbr) + 1
Någon som har förslag på hur jag skapar posten i tabellen bo_Licence?
Sv:MSSQL 2005 kasta om en sträng.
SELECT @MaxLicNbr = MAX(LicNbr)
FROM bo_Licence WHERE .... Sv: MSSQL 2005 kasta om en sträng.
<code c#>
DECLARE @parmAge nchar(8)
DECLARE @parmMaleFemale nvarchar (1)
DECLARE @parmLicNbr char(12)
DECLARE @parmFirstName nvarchar(50)
SET @parmAge = '60-03-18';
SET @parmMaleFemale = 'M';
SET @parmFirstName = 'Gert';
SET @parmLicNbr = @parmMaleFemale +SUBSTRING(@parmAge,7,2) + SUBSTRING(@parmAge,4,2) + SUBSTRING(@parmAge,1,2) + UPPER(SubString(@parmFirstName,1,3));
PRINT @parmLicNbr Om jag kör hit så blir @parmLicNbr ='M180360GER'
SELECT * FROM bo_Licence WHERE LicNbr LIKE @parmLicNbr + '%'
Men om jag hårdskiver in så får jag tre träffar.
SELECT * FROM bo_Licence WHERE LicNbr LIKE 'M180360GER%'--@parmLicNbr + '%'Sv: MSSQL 2005 kasta om en sträng.
Så vill jag addera 03 till 04. Har provat med:
SET @parmMaxLicNbr = SUBSTRING(@parmMaxLicNbr , 1,10) + SUBSTRING(@parmMaxLicNbr,11,2) + 1
Men får då fel att det inte går att konvertera nvarchar och intSv:MSSQL 2005 kasta om en sträng.
<code>
SET @parmMaxLicNbr = SUBSTRING(@parmMaxLicNbr , 1, 11) + CAST(SUBSTRING(@parmMaxLicNbr, 11, 2) + 1 AS nvarchar(1))
</code>
Tänk då på att när du gör denna addition så "försvinner" nollan framför.
För att få med den i ditt fall så måste det första uttrycket läsa ett tecken till i SUBSTRING() (se ovan).
Om du sedan går vidare med högre siffror (>9) då måste du ta hänsyn till detta igen.
Lite tillkrånglat tycker jag. Sv: MSSQL 2005 kasta om en sträng.
Tack för hjälpen :)