I en SELECT utan några krusiduller? Tveksamt. Det blir nog till att skapa en UDF.
Hej!
Kan man i SQL.server göra om en sträng som ser ut så här:
Avtal wee 450
till bara
450
Mvh
Henrik
17 svar · 951 visningar · startad av devotion
Hej!
Kan man i SQL.server göra om en sträng som ser ut så här:
Avtal wee 450
till bara
450
Mvh
Henrik
I en SELECT utan några krusiduller? Tveksamt. Det blir nog till att skapa en UDF.
Vet inte om SQL server stödjer regexp, men man kan ju skriva udf:er i ex. .NET som man sedan kan använda sig av.
alternativt kan man ju kanske, om man vet hur strängen kommer att se ut, ex. ser den alltid ut ex: Avtal wee 12313, dvs 2 mellanslag och två stringar och en int typ..
så kan man kanske splita mellanslagen, och ta sista värdet i den splitade strängen, annars kan ju kolla upp .net i samband med UDF i Sql server, ex: http://www.eggheadcafe.com/articles/sql_server_2005_clr_regex.asp
Fredde Mannen skrev:
Vet inte om SQL server stödjer regexp, men man kan ju skriva udf:er i ex. .NET som man sedan kan använda sig av.
alternativt kan man ju kanske, om man vet hur strängen kommer att se ut, ex. ser den alltid ut ex: Avtal wee 12313, dvs 2 mellanslag och två stringar och en int typ..
så kan man kanske splita mellanslagen, och ta sista värdet i den splitade strängen, annars kan ju kolla upp .net i samband med UDF i Sql server, ex: http://www.eggheadcafe.com/articles/sql_server_2005_clr_regex.asp
Det bästa hade ju varit en regexp, eftersom det inte finns något givet mönster i strängen, förutom att jag vill få ut det numeriska värdet... :)
Får fundera lite på det.
Mvh
Henrik
Skulle man kunna göra det i Excel? Datat kommer ju därifrån.... :)
devotion skrev:
Skulle man kunna göra det i Excel? Datat kommer ju därifrån.... :)
http://www.tanguay.info/web/codeExample.php?id=908
http://www.vbaexpress.com/kb/getarticle.php?kb_id=68
Man bör kunna göra en regexp i Excell så.. :) Man kan ju alltid pröva..
Du kan ju alltid skapa en funktion;
http://forums.microsoft.com/TechNet/ShowPost.aspx?PostID=2313798&SiteID=17
eller:
http://xpscodes.com/2008/04/15/remove-strip-characters-from-alphanumeric-data
SQL Server stödjer reguljära uttryck, men om man kan använda den på utplockade fält och inte bara på jämförelser får du fråga någon annan. ;)
Hej igen!
Jag tittade lite mer på denna:
Create FUNCTION [dbo].[ufnFormatContractNumber](
@contractno varchar(20)
)
RETURNS varchar(20)
AS
BEGIN
Return (Select SUBSTRING(@contractno, n, 1)
from (SELECT number n FROM master.dbo.spt_values
WHERE type = 'p'
AND number BETWEEN 1 AND len(@contractno)
) AS Nums
where SUBSTRING(@contractno, n, 1) like '[0-9]'
for xml path(''))
END;
men vet inte riktigt hur jag ska tillämpa den...
Tabellen heter tblCustomer och fältet heter Custom2
Mvh
Henrik
om nu funktionen är skapad, anropas den på föjande sätt
dbo.ufnFormatContractNumber(...)
hur hade du tänkt att den skall användas.. vad är syftet mer än just få ut siffrorna.
Jag har en sträng som innehåller tex
123 on call
123 är ett avtalsnummer och "on call" är avtalstypen
Jag vill därför lyfta ut detta och lägga i ett annat fält; Custom4
Mvh
Henrik
:)
devotion skrev:
Löste det med Vb-script och regexp,,, :)
Mvh
Henrik
Hur? :) behöver samma sak ungefär
Så här:
'
Option explicit
'
Sub main()
dim Conn, sSQL, Rs
dim sString, sContractNr, lId
'Öppna databasen
Set Conn=CreateObject("ADODB.Connection")
Conn.Open Application.sDbConnectionString
Set Rs=CreateObject("ADODB.Recordset")
'SQL-fråga
sSQL= "SELECT tblCustomer.Custom2, tblCustomer.[Id]" _
& " FROM [tblCustomer]"
Rs.Open sSQL, Conn
while not rs.EOF
sString = Rs("Custom2")
sContractNr = GetContractNr(sString)
lId = Rs("Id")
sSQL= "UPDATE [tblCustomer] SET [Modified] = GetDate(), [Custom4] = '" & sContractNr & "' WHERE [Id] = " & lId & ""
Conn.Execute sSQL
rs.MoveNext
wend
msgBox "Klart"
Rs.Close
Set Rs=Nothing
Set Conn=Nothing
Call Refresh()
End sub
'Funktion för att hämta kontraktsnummer
Function GetContractNr(str)
with new regExp
.pattern = "[^\d]+"
.IgnoreCase = True
.Global = True
GetContractNr = .Replace(str, "")
End With
End Function
Mvh
henrik
OT: Jag blev nyfiken på tabellstrukturen, var har du: Avtal wee 450
überfuzz skrev:
OT: Jag blev nyfiken på tabellstrukturen, var har du: Avtal wee 450
Just den strängen var bara ett exempel,
Tanken var att ta bort allt som inte var ett numeriskt tal.
Dvs spara 450 i exemplet.
:)
Jag frågade mest för att jag inte förstod i vilket sammanhang man har siffror i en sträng när man behöver siffrorna som siffror. Alltså, att någon sparar VOLVO 142 DL i en databas kan jag förstå, men det du frågade efter gjorde mig förbryllad.
ja, nu var det ju regexp jag var intresserad av i exemplet då, det var det jag citerade :)