SQL Full Trim-functie - Toegang/VBA-code Ik kan het, maar ik ken geen SQL-functies

Ik moet velden combineren en vervolgens extra spaties in het midden van een tekstveld inkorten. Met Access is het gemakkelijk voor mij, maar het creëren van een SQL-functie ontgaat me. Dit is hoe ik het doe in Access, iemand die me kan helpen bij het maken van een SQL-functie?

In VBA Access Query kan ik dit doen met de volgende code in de query:

FullTrim([tblLeadsResi].[House Number] & [tblLeadsResi].[Street] & " " & 
    [tblLeadsResi].[Street Suffix] & " " & [tblLeadsResi].[Post-directional] & 
    IIf(Not IsNull([tblLeadsResi].[Apartment Number])," #" & 
    [tblLeadsResi].[Apartment Number],""))

Modulecode in toegang: (In principe als het een dubbele spatie is, wordt de eerste spatie niet toegevoegd)

Public Function FullTrim(stText As String) As Variant
Dim intLen As Integer, stPart As String, stBlank As String, stNewText As String

    '   ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    '   ++++    Takes any spaces away from a Text Value     ++++
    '   ++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    If IsNull(stText) Or stText = "" Then
        FullTrim = ""
    Else
        For intLen = 1 To (Len(stText) - 1)
            stPart = Mid(stText, intLen, 1)
            stBlank = Mid(stText, intLen, 2)
            If stBlank <> "  " Then
                stNewText = stNewText & stPart
            End If
        Next intLen

        intLen = Len(stText)
        stPart = Mid(stText, intLen, 1)
        stNewText = stNewText & stPart

        stNewText = Trim(stNewText)
        FullTrim = stNewText
    End If
End Function
1
SQL betekent niet SQL Server. Oracle en Access, tussen een aantal andere databases, hebben allemaal hun eigen versie van SQL. Als u een SQL Server-antwoord wilt, gebruik dan een SQL Server-tag, geen generieke SQL-tag.
toegevoegd de auteur Fionnuala, de bron
Het probleem is dat ik spaties aan de gegevens moet toevoegen om velden samen te voegen, maar sommige velden zijn leeg. Ik corrumpeer de gegevens om de velden samen te voegen omdat ik niet altijd een straatachtervoegsel of directionele gegevens heb. Ik probeer de gegevens op te ruimen door verschillende velden samen te voegen (ik koop Leads en deze komen op deze manier)
toegevoegd de auteur Crazyd, de bron
A) Sorry, ik heb de algemene SQL-tag en de SQL Server-tag toegevoegd; Ik ben nieuw op deze website. B) Ik ben ook nieuw voorSQL-serverals je me een voorbeeld wilt geven van hoe je het beter kunt concateneren. Ik zou het op prijs stellen. C) De verstrekte informatie zal me helpen bij toekomstige import van gegevens, de reden dat ik de volledige inkrimping in de toegang heb, was in de eerste plaats dat ik Leads-gegevens van veel bronnen kreeg en hun gegevens moest opschonen.
toegevoegd de auteur Crazyd, de bron

2 antwoord

Creatie

CREATE FUNCTION dbo.FullTrim(@Value NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
    DECLARE @Subs NVARCHAR(6)
    SET @Subs = '[email protected]$$#%' -- Make this some string you will never have in your data
    RETURN LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(@Value, '  ', ' ' + @Subs), @Subs + ' ', ''), @Subs, '')))
END

Gebruik

SELECT dbo.FullTrim('  This is a     string      with    many spaces ')

Resultaat

This is a string with many spaces
1
toegevoegd
In sql is IS NULL. Je kunt ook isnull gebruiken (expresion, value-if-null)
toegevoegd de auteur Charleh, de bron
Bedankt voor de hulp; Ik waardeer dat.
toegevoegd de auteur Crazyd, de bron
Kan ik je nog een ding vragen? ... In VBA heb ik de functie IsNull() om te controleren of iets Null is, is dit hetzelfde in SQL?
toegevoegd de auteur Crazyd, de bron

Probeer deze functie:

CREATE FUNCTION [dbo].[FullTrim](@text nvarchar(max))
RETURNS nvarchar(max)
AS
BEGIN
    RETURN replace(@text, ' ', '')
END

... en passeer dan in al uw aaneengeschakelde velden zoals:

SELECT dbo.FullTrim([tblLeadsResi.House Number] + [tblLeadsResi.Street] + ...) 
FROM tblLeadsResi
...
0
toegevoegd