select left(emailaddress, len(emailaddress) - charindex('@', emailaddress))
我得到如下结果:如何从字符串[email protected]中提取字符串'foo'?
[email protected]
请更正以下select语句。我需要用电子邮件地址的语气来做到这一点,并只提取用户名。
select left(emailaddress, len(emailaddress) - charindex('@', emailaddress))
我得到如下结果:如何从字符串[email protected]中提取字符串'foo'?
[email protected]
请更正以下select语句。我需要用电子邮件地址的语气来做到这一点,并只提取用户名。
你在不经意间重新实施“右”那里:)
试试这个:
select left(emailaddress, charindex('@', emailaddress) - 1)
它寻求@
的位置,并采取字符数最多,但不包括(这是- 1
)@
符号。
请注意不具有@
的字符串;你会得到一个空字符串。
我不知道,为什么-1? charindex给出了一个索引,剩下的长度据我了解? – StampedeXV 2009-09-17 14:20:08
Ayup。 Charindex从左开始计数,所以如果你想要字符串的左边部分,就减去1,这样你就不会包含搜索字符(@)本身。如果您需要字符串的* right *部分,即*搜索字符后面的*,则只需要字符串的长度。 – Martha 2009-09-17 14:21:05
例如:[email protected] charindex返回1 left([email protected],1)返回 - >我们想要的。所以我们不需要减号1. – StampedeXV 2009-09-17 14:24:20
只是一个猜测。我没有任何访问sql-server的权限,不熟悉它。但是......
你试过:
select left(emailaddress, charindex('@', emailaddress))
这将包括@字符,您需要减去1以获得所有字符但不包括搜索字符 – Martha 2009-09-17 14:23:00
实际上,这取决于字符串是零索引还是单索引。如果为零索引,charindex返回3,那么您会得到3个左边的字符。基于1的字符串将返回4,因此它将包含'@'。 – 2009-09-17 14:29:35
但是在TransactSQL中,charindex是基于1的!请参阅http://msdn.microsoft.com/en-us/library/ms186323.aspx – 2009-09-17 14:32:04
select left(emailaddress, charindex('@', emailaddress)-1)
如果您需要吨做到这一点(或吨,但肯定不是色调)的电子邮件地址和/或你正在做的经常,恰当的时间是数据进入表格(通过使用插入/更新触发器)并在该点将其分成两列。这样,它只会在需要时发生,而不是每次在桌上进行选择。
数据几乎是总是读取的次数比写入的要多,通过在插入/更新时分割,可以最大限度地减少要完成的工作量。每行函数从不能很好地扩展,因为表格变得更大,并且简单连接两列的成本要比根据字符分隔符分割它们要小得多。
其他答案已经告诉你如何做拆分。我的观点是你在错误的时间做这件事。当然,如果模式更改不在问题中,请忽略此响应。但在我看来,这将是最好的选择。
删除了您的真实电子邮件,以防万一,如果我错了,随时加回来;没有意见分享您的电子邮件地址(如果是)垃圾邮件发送者得到:) – 2009-09-17 14:27:00