Как очистить столбцы с точками в начале и конце текста, используя T SQL для SQL Server? - PullRequest
2 голосов
/ 29 июля 2010

Описание:

  • У меня есть столбец (адрес электронной почты) на таблица (BusinessUsers) в моих базах данных который хранит адрес электронной почты.

Проблема:

  • Некоторые строки данных имеют точку в начале этого столбец например .jane.doe @ mycompany.com (точка, от которой я хочу избавиться, это точка перед символом j в jane)
  • Некоторые строки данных имеют точку в конце этого столбец например john.doe@mycompany.com. (Точка, от которой я хочу избавиться, это точка сразу после символа m в com)

Решение:

  • Я использую SQL Server 2008, есть ли оператор T SQL, который может это сделать

Спасибо заранее

Ответы [ 3 ]

4 голосов
/ 29 июля 2010

Если под «чистым» вы подразумеваете удаление точек в имени адреса, но не в домене, вы можете сделать что-то вроде:

Update BusinessUsers
Set EmailAddress = Replace(Substring(EmailAddress, 1, CharIndex('@', EmailAddress) - 1), '.', '')
                    + Substring(EmailAddress, CharIndex('@', EmailAddress), Len(EmailAddress))
From BusinessUsers

Чтобы удалить конечные точки, вы можете сделать:1005 *

3 голосов
/ 29 июля 2010

Использование собственной функциональности - SUBSTRING

С точкой в ​​начале

UPDATE BUSINESSUSERS
   SET emailsaddress = SUBSTRING(emailsaddress, 2, LEN(emailsaddress))
 WHERE emailsaddress LIKE '.%'

С точкой в ​​конце

UPDATE BUSINESSUSERS
   SET emailsaddress = SUBSTRING(emailsaddress, 1, LEN(emailsaddress)-1)
 WHERE emailsaddress LIKE '%.'
1 голос
/ 29 июля 2010

Другие ответы хороши, особенно если вам приходится жить на чистой земле T-SQL.Однако, как еще один вариант, вы можете решить такие проблемы с помощью небольшого количества магии Regex.Поскольку вы используете SQL 2008, вы можете использовать .NET.Вот некоторый VB-код для создания 2 пользовательских функций CLR, которые вы можете использовать снова и снова:

Option Explicit On
Option Strict On
Option Compare Binary
Option Infer On

Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.SqlTypes
Imports System.Text
Imports System.Text.RegularExpressions
Imports Microsoft.SqlServer.Server

Partial Public Class UserDefinedFunctions

    <Microsoft.SqlServer.Server.SqlFunction()>
    Public Shared Function IsRegexMatch(ByVal input As SqlString, ByVal pattern As SqlString) As SqlBoolean
        If input.IsNull OrElse pattern.IsNull Then Return SqlBoolean.Null
        Return Regex.IsMatch(input.Value, pattern.Value, RegexOptions.IgnorePatternWhitespace Or RegexOptions.Singleline Or RegexOptions.Multiline)
    End Function

    <Microsoft.SqlServer.Server.SqlFunction()>
    Public Shared Function RegexReplace(ByVal input As SqlString, ByVal pattern As SqlString, ByVal replacement As SqlString) As SqlString
        If input.IsNull OrElse pattern.IsNull OrElse replacement.IsNull Then Return SqlString.Null
        Return Regex.Replace(input.Value, pattern.Value, replacement.Value, RegexOptions.IgnorePatternWhitespace Or RegexOptions.Singleline Or RegexOptions.Multiline)
    End Function

End Class

После добавления этих пользовательских функций в SQL Server вы можете решить свою проблему простым грязным вызовом, подобным этому:

update BusinessUsers
set EmailAddress = dbo.RegexReplace(EmailAddress, '^\.|\.$', '')

Это отличное универсальное решение, помогающее решать всевозможные проблемы с текстовыми манипуляциями, с которыми вы можете столкнуться в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...