Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql MS访问:替换;括弧;_Sql_Ms Access_Replace - Fatal编程技术网

Sql MS访问:替换;括弧;

Sql MS访问:替换;括弧;,sql,ms-access,replace,Sql,Ms Access,Replace,在我使用的一个ms access表中,我们有一个设置大小的文本字段。 在这个字段的末尾有一些额外的代码,这些代码根据情况而变化。 我正在寻找一种删除其中一个代码的方法,但即使最后一部分被字段最大大小截断 让我们将该字段称为“field”,并将要删除的代码称为“abc longcode” 如果我使用带有字符串abc longcode的replace SQL函数,那么查询只会在代码完成时工作 如果我还希望我的更新查询(只删除字段末尾的特定代码)处理不完整的代码,那么如何将其转换为ms SQL 它必须

在我使用的一个ms access表中,我们有一个设置大小的文本字段。 在这个字段的末尾有一些额外的代码,这些代码根据情况而变化。 我正在寻找一种删除其中一个代码的方法,但即使最后一部分被字段最大大小截断

让我们将该字段称为“field”,并将要删除的代码称为“abc longcode”

如果我使用带有字符串abc longcode的replace SQL函数,那么查询只会在代码完成时工作

如果我还希望我的更新查询(只删除字段末尾的特定代码)处理不完整的代码,那么如何将其转换为ms SQL

它必须删除(或者准确地说,替换为“”)以下所有内容(当然,不是真正的代码):

显然,我可以通过几个查询来实现这一点。每一个都将替换一个预期的截断代码。。。但这听起来并不理想

此外,当字段足够大,可以获取所有代码时,有时在末尾可能会有额外的细节,我也希望保留这些细节,因此我不能只查找“abc-l”并删除下面的所有内容:\

此查询(如果找不到更好的方法,则查询)将直接保存到.mdb数据库中

因此,虽然我可以在ms sql查询之外想出几种方法来实现这一点,但这对我没有帮助

有什么帮助吗?
谢谢。

您可以编写一个自定义VBA替换方法来替换任何给定的案例{“abc longcode”,…“abc-l”}。这基本上与您的“多个查询”想法相同,只是它只能是一个查询。我的VBA生锈了,但有点像:

public function ReplaceCodes(str as string) as string
     dim returnString as string

     returnString = str
     returnString = replace(returnString,"abc-longcode","")
     // ... etc...

     ReplaceCodes = returnString
end function

我可能在replace上得到了错误的参数顺序:)

您可以编写一个自定义的VBA replace方法来替换任何给定的案例{“abc longcode”,…“abc-l”}。这基本上与您的“多个查询”想法相同,只是它只能是一个查询。我的VBA生锈了,但有点像:

public function ReplaceCodes(str as string) as string
     dim returnString as string

     returnString = str
     returnString = replace(returnString,"abc-longcode","")
     // ... etc...

     ReplaceCodes = returnString
end function

我可能在replace:)上获得了错误的参数顺序。

我将使用自己的自定义函数来完成此操作,使用该函数获取字符串的第一部分。然后可以在更新查询中使用该值

Public Function FirstPart(thetext As String) As String
    Dim ret As String
    Dim arrSplitText As Variant

    arrSplitText = Split(thetext, "-")
    ret = arrSplitText(0)

    FirstPart = ret
End Function

我将使用我自己的自定义函数来实现这一点,使用该函数来获取字符串的第一部分。然后可以在更新查询中使用该值

Public Function FirstPart(thetext As String) As String
    Dim ret As String
    Dim arrSplitText As Variant

    arrSplitText = Split(thetext, "-")
    ret = arrSplitText(0)

    FirstPart = ret
End Function
你可以使用:

 Left(FieldX,InStr(FieldX,"abc-")-1) 
编辑再评论

如果有空格或其他标准分隔符:

 IIf(InStr(InStr(FieldX, "abc-"), FieldX, " ") = 0, Left(FieldX, InStr(FieldX, "abc-") - 1), Replace(FieldX, Mid(FieldX, InStr(FieldX, "abc-"), InStr(InStr(FieldX, "abc-"), FieldX, " ") - InStr(FieldX, "abc-")), ""))
你可以使用:

 Left(FieldX,InStr(FieldX,"abc-")-1) 
编辑再评论

如果有空格或其他标准分隔符:

 IIf(InStr(InStr(FieldX, "abc-"), FieldX, " ") = 0, Left(FieldX, InStr(FieldX, "abc-") - 1), Replace(FieldX, Mid(FieldX, InStr(FieldX, "abc-"), InStr(InStr(FieldX, "abc-"), FieldX, " ") - InStr(FieldX, "abc-")), ""))

我喜欢这个答案,因为它是纯SQL性质的,但是这个代码的问题是,如果我的长代码在字段中是完整的,并且字段末尾有一些额外的细节,那么就不会保留这些额外的细节。换句话说,它删除了从我正在寻找的内容开始的所有内容,而不是“仅仅”我正在寻找的内容。我认为您没有很好地定义这个问题,因为我不知道您希望将示例数据转换为什么。就我所见,你的样本数据不包括你想要移除的东西之后的数据,所以想出一个解决方案是非常困难的。对我来说,类型是非常困难的,它们确实时不时发生。@David W Fenton这些评论似乎是针对OP的,因此“呃?”呃,我所说的评论是OP提出的,正确的?我喜欢这个答案,因为它是纯SQL性质的,但是这个代码的问题是,如果我的长代码在字段中是完整的,并且字段末尾有一些额外的细节,那么就不会保留这些额外的细节。换句话说,它删除了从我正在寻找的内容开始的所有内容,而不是“仅仅”我正在寻找的内容。我认为您没有很好地定义这个问题,因为我不知道您希望将示例数据转换为什么。就我所见,你的样本数据不包括你想要移除的东西之后的数据,所以想出一个解决方案是非常困难的。对我来说,类型是非常困难的,它们确实时不时发生。@David W Fenton这些评论似乎是针对OP的,因此“呃?”呃,我所说的评论是OP提出的,正确的?它上面写着“tb”,这就是最初问题的发帖人。我更喜欢用纯SQL的方式来做这件事,但我认为这是不可能的。我喜欢这个答案,因为它还允许我将其他代码放在我将要寻找的相同函数中。示例:def longcode、def longcod等。。。谢谢你的帮助!纯SQL的替代方案是查询中的一长串替换函数,这些函数很难读取、维护,而且很难看。Access已经够难看的了:)我更喜欢用纯SQL的方式来实现这一点,但我认为这是不可能的。我喜欢这个答案,因为它还允许我将其他代码放在我将要寻找的相同函数中。示例:def longcode、def longcod等。。。谢谢你的帮助!纯SQL的替代方案是查询中的一长串替换函数,这些函数很难读取、维护,而且很难看。访问已经够难看的了:)