【问题标题】:Sqldf: convert and selectSqldf:转换和选择
【发布时间】:2014-09-19 00:52:44
【问题描述】:

我正在尝试读取 R 中的 SQL 数据库(sqldf、postgresql),但在一列上必须有一些限制(转换和选择)。我要调整的列包含三个可能的元素(全部为字符串),即空字符串、四个数字或四个数字后跟一个空格和两个字符。一个例子可以是

"2378", "", "4329", "4193 AM", "2195"

我只想保留实数和 1000 到 1200 之间的元素(并转换为 int 而不是字符串类型)。该列的名称是“post”,这就是我到目前为止所得到的

query = "
SELECT *, cast(post as int) as postConv
FROM base
WHERE length(post) > 0 and
length(post) < 5
"

问题是我不知道如何进行选择,以便新转换的数字只有 1000 到 1200 之间的值。现在,将制作一个额外的列“postConv”,但它是否也可能转换后的元素只是存储在“post”列中吗?

【问题讨论】:

  • 是否应该返回值“1100 AM”,但返回为 1100?它介于 1000 和 1200 之间,但旁边有文字“AM”。只是想澄清你想用这些做什么。
  • 不,我不想保留这些值。
  • where post between 1000 and 1200
  • 这不起作用,因为元素是字符串
  • -1 你试过了吗?我猜不是,因为它确实有效。

标签: sql r postgresql sqldf


【解决方案1】:

我认为你可以使用:

select *
  from base
 where col between '1000' and '1200'
   and col not like '% %'

http://sqlfiddle.com/#!15/1402b/3/0

但这假设您不想将实数视为实数的字符串始终包含空格,而您不想过滤掉的字符串则不包含空格。在您的示例数据中,这将起作用。

在小提琴中,“1100 AM”没有返回,因为它在字符串中包含一个空格。 1100 没有被过滤掉,因为它介于 1000 和 1200 之间,并且不包含空格。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-16
    • 2021-07-08
    • 1970-01-01
    相关资源
    最近更新 更多