Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.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
Database 如何在Cassandra中将日期类型的值转换为文本?_Database_Cassandra_Cql - Fatal编程技术网

Database 如何在Cassandra中将日期类型的值转换为文本?

Database 如何在Cassandra中将日期类型的值转换为文本?,database,cassandra,cql,Database,Cassandra,Cql,我有一张卡桑德拉表,结构如下- CREATE TABLE timeseries_s ( prop_name text PRIMARY KEY, description text, value text ); 现在我需要在这个表中插入一个属性,它的值将是文本格式的当前日期。我已经创建了以下CQL,但它给出了以下错误- INSERT INTO timeseries_s (prop_name, description, value) VALUES ('xyz', 'abc', T

我有一张卡桑德拉表,结构如下-

CREATE TABLE timeseries_s (
   prop_name text PRIMARY KEY,
   description text,
   value text
);
现在我需要在这个表中插入一个属性,它的值将是文本格式的当前日期。我已经创建了以下CQL,但它给出了以下错误-

 INSERT INTO timeseries_s (prop_name, description, value) VALUES ('xyz', 'abc', TODATE(now())));
错误-SyntaxException:第1行:168不匹配的输入“')”应为EOF(…'abc',TODATE(now())[)…)

此后,我在下面尝试-

 INSERT INTO timeseries_s (prop_name, description, value) VALUES ('xyz', 'Migration for DSE started at this time', CAST(TODATE(now()) AS TEXT));
错误-语法异常:第1行:158在输入“(”(…值('xyz','abc',强制转换)处没有可行的替代方案


有什么建议吗?

TODATE
列名
作为输入。此外,
CAST
仅用于
SELECT
语句。可能您可以通过程序实现这一点。

我能想到的唯一方法是使用一个用户定义的函数来解决这个问题。首先,您将需要在
cassandra.yaml
中启用用户定义的函数:

enable_user_defined_functions: true
一旦节点重新启动,我通过在我的
stackoverflow
keyspace中定义一个名为
totext
的函数来完成这项工作,如下所示:

aploetz@cqlsh:stackoverflow> CREATE OR REPLACE FUNCTION totext (input DATE)
             RETURNS NULL ON NULL INPUT RETURNS TEXT
             LANGUAGE java AS 'return input.toString();';
> INSERT INTO timeseries_s (prop_name, description, value)
VALUES ('xyz', 'Migration for DSE started at this time',
                     stackoverflow.totext(todate(now())));

> SELECT * FROM timeseries_s ;

 prop_name | description                            | value
-----------+----------------------------------------+------------
       xyz | Migration for DSE started at this time | 2020-09-03

(1 rows)
创建该函数后,您可以在
INSERT
中使用它,如下所示:

aploetz@cqlsh:stackoverflow> CREATE OR REPLACE FUNCTION totext (input DATE)
             RETURNS NULL ON NULL INPUT RETURNS TEXT
             LANGUAGE java AS 'return input.toString();';
> INSERT INTO timeseries_s (prop_name, description, value)
VALUES ('xyz', 'Migration for DSE started at this time',
                     stackoverflow.totext(todate(now())));

> SELECT * FROM timeseries_s ;

 prop_name | description                            | value
-----------+----------------------------------------+------------
       xyz | Migration for DSE started at this time | 2020-09-03

(1 rows)