作为标题,我想从SQL Server中的一个表中连接几列,我尝试使用paste
函数,如下所示,但给予以下错误:
> tbl(channel,'##iris') %>%
+ mutate(string=paste(Species,'-',
+ Sepal.Length,'-',
+ Sepal.Width,'-',
+ Petal.Length,'-',
+ Petal.Width,sep=''))
Error: PASTE() is not available in this SQL variant
3条答案
按热度按时间cgyqldqp1#
我发现了Ben Baumer提供的一个解决方案here,并想在这里分享。
方法是使用
CONCAT
而不是paste
。lb3vh1jj2#
在R
data.frames
上使用tidyverse
,tidyr::unite
将是惯用的方法。虽然不是一个
dplyr
动词,但它还没有被翻译为通过dbplyr
/SQL
使用。您可以在SQL Server中以这种方式定义自己的
unite
(不幸的是,我无法测试,但它应该可以工作):然后:
对于支持
||
串联运算符的DBMS(例如Oracle
),只需将concat_str
定义替换为:jdgnovmf3#
我必须对@moodymudskipper的解决方案做一些小的修改才能让它工作。
我需要为我的用例添加的是一种忽略NA和/或NULL的方法,就像来自
tidyr::unite
的na.rm
arg一样。编辑:这里是带有na.rm参数的版本。我确实需要
...
周围的list
Package 器。这可能需要适应Oracle以外的其他RDBMS。