Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.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
Mysql SQL-在包含数字和字母的列中搜索特定范围的最佳方法是什么?_Mysql_R_Sqldf - Fatal编程技术网

Mysql SQL-在包含数字和字母的列中搜索特定范围的最佳方法是什么?

Mysql SQL-在包含数字和字母的列中搜索特定范围的最佳方法是什么?,mysql,r,sqldf,Mysql,R,Sqldf,我有一个带有字母和数字的代码表,特别是aa00到ZZ99。我很难找到在本专栏中搜索dd01-GG99等范围的最佳方法。最好的方法是什么?(我正在将sqldf与RStudio一起使用) 我尝试过使用between语句,例如,但结果不是我想要的。事实上,它显示的是相反的,没有小写字母: SELECT prodcode FROM data WHERE prodcat BETWEEN 'GG99' AND 'dd01'; 编辑的评论太长: library(ggvis) library(readr

我有一个带有字母和数字的代码表,特别是aa00到ZZ99。我很难找到在本专栏中搜索dd01-GG99等范围的最佳方法。最好的方法是什么?(我正在将sqldf与RStudio一起使用)

我尝试过使用between语句,例如,但结果不是我想要的。事实上,它显示的是相反的,没有小写字母:

SELECT prodcode
  FROM data
 WHERE prodcat BETWEEN 'GG99' AND 'dd01';
编辑的评论太长:

library(ggvis)
library(readr)
library(dplyr)
library(knitr)
library(sqldf)
library(tidyr)
data <- read_csv("C:/Users/name/Documents/test1.csv")
compn <-read_csv("C:/Users/name/Documents/test2.csv")


prodcode <- expand.grid(x1 = LETTERS,
                        x2 = letters,
                        x3 = 0:9,
                        x4 = 0:9)
prodcode$prodcat <- apply(data, 1, paste0, collapse = "")




test <- sqldf("SELECT prod
               FROM data, compn
               WHERE data.cono = compn.cono
               AND (SELECT * FROM prodcode 
                        WHERE (SUBSTR(UPPER(prodcat), 1, 2) >= 'DD' AND 
                        CAST(SUBSTR(prodcat, 3, 2) AS INT) >= 00 ) AND
                        (SUBSTR(UPPER(prodcat), 1, 2) <= 'GG' AND
                        CAST(SUBSTR(prodcat, 3, 2) AS INT) <= 99);
              GROUP BY prod
              ORDER BY prod ASC;")


test
库(ggvis)
图书馆(readr)
图书馆(dplyr)
图书馆(knitr)
库(sqldf)
图书馆(tidyr)

data下面是SQL代码,它将得到您的建议。在SQL中,需要将字母和数字分开进行比较。由于您的数字具有固定的宽度,因此您可以不转换为
INT
。如果有非固定宽度的数值,则必须确定适当的排序行为

prodcode <- expand.grid(x1 = LETTERS,
                        x2 = letters,
                        x3 = 0:9,
                        x4 = 0:9)
prodcode$prodcat <- apply(prodcode, 1, paste0, collapse = "")

library(sqldf)

sqldf(
  "SELECT * FROM prodcode 
   WHERE (SUBSTR(UPPER(prodcat), 1, 2) >= 'DD' AND 
            CAST(SUBSTR(prodcat, 3, 2) AS INT) >= 00 ) AND
         (SUBSTR(UPPER(prodcat), 1, 2) <= 'GG' AND
            CAST(SUBSTR(prodcat, 3, 2) AS INT) <= 99)"
)

prodcode以下是SQL代码,可以得到您的建议。在SQL中,需要将字母和数字分开进行比较。由于您的数字具有固定的宽度,因此您可以不转换为
INT
。如果有非固定宽度的数值,则必须确定适当的排序行为

prodcode <- expand.grid(x1 = LETTERS,
                        x2 = letters,
                        x3 = 0:9,
                        x4 = 0:9)
prodcode$prodcat <- apply(prodcode, 1, paste0, collapse = "")

library(sqldf)

sqldf(
  "SELECT * FROM prodcode 
   WHERE (SUBSTR(UPPER(prodcat), 1, 2) >= 'DD' AND 
            CAST(SUBSTR(prodcat, 3, 2) AS INT) >= 00 ) AND
         (SUBSTR(UPPER(prodcat), 1, 2) <= 'GG' AND
            CAST(SUBSTR(prodcat, 3, 2) AS INT) <= 99)"
)


prodcode您可能会考虑
grepl
和一个适当的伴随正则表达式,并将其配对到dplyr select命令中。如果看不到“测试”数据帧实际上由什么组成,那么目前很难为您提供帮助。(即,没有可复制的示例可用)

您可能会考虑
grepl
和一个适当的伴随正则表达式,并将其配对到dplyr select命令中。如果看不到“测试”数据帧实际上由什么组成,那么目前很难为您提供帮助。(即,没有可复制的示例)

考虑将字符串组件与数字组件分开存储。请为我指出正确的方向。我在其他地方读过,但我不知道如何开始。试试新版本的dplyr,它有所有(奇妙的)数据争用工具,现在很容易与数据库一起使用。因此,您可以按照通常的方式进行
筛选
选择
。我假设数据的格式是正确的。如何使用DPLYR将AA00转换为字符串组件。考虑将字符串组件与数字组件分开存储。请您指出正确的方向。我在其他地方读过,但我不知道如何开始。试试新版本的dplyr,它有所有(奇妙的)数据争用工具,现在很容易与数据库一起使用。因此,您可以按照通常的方式进行
筛选
选择
。我假设数据的格式是正确的。如何使用dplyr将AA00更改为字符串组件。是否可以将其作为子查询添加到主查询中。这样地?编辑成主要帖子。据我所知,是的。我自己从来没有尝试过,但是
sqldf
支持大多数SQL引擎提供的大多数常见功能。它仍然没有拆分数据。PROD代码表被拆分,但是它的数据也没有正确分割。可以考虑在y和z</c>构造之间使用<代码> x。我可以像主查询中的子查询一样添加这个吗?这样地?编辑成主要帖子。据我所知,是的。我自己从来没有尝试过,但是
sqldf
支持大多数SQL引擎提供的大多数常见功能。它仍然没有分割数据。PROD代码表被拆分,但是它的数据也没有正确分割。可以考虑在y和z</c>构造之间使用<代码> x。